将多个 Excel 列分组为行

将多个 Excel 列分组为行

目前我正在做一个老师点评内容的专栏。

我想用内容中的单词之间的空格或逗号或标点符号来分隔。

同时,我想取出内容中的每个单词,然后将它们放入行而不是列中。

例子:

凯瑟琳是个好女孩。-> 这是老师的评语。

在 Excel 中划定界限后,我将“凯瑟琳是个好女孩。”分成 6 列,每列代表 1 个单词。

但是,我希望将单词的结果按行排列。它看起来会像这样,分为 6 行:

Catherine
is
a
good
girl
.

答案1

Excel 有能力做到这一点

  1. 复制一列或多行中的数据。

  2. 在粘贴复制的数据之前,右键单击第一个目标单元格(要粘贴数据的行或列的第一个单元格),然后单击“选择性粘贴”。

  3. 在“选择性粘贴”对话框中,选择“转置”,然后单击“确定”。

您会在对话框的右下角看到“Transpose”复选框:

在此处输入图片描述

本文来自 Excel 2003 帮助,但该过程适用于最新的 Excel。不过对话框可能看起来不同。

答案2

下面的 VBA 代码可以达到这个效果。

Sub FlattenToSingleCol()
    Cells(1, 1).Activate ' Go to the top left

    ' Go past the last row that starts with a word
    Do Until IsEmpty(ActiveCell)
        DoEvents
        ActiveCell.Offset(1).Select
    Loop

    ' Set curRow to the last row that starts with a word (the row above ActiveCell)
    curRow = ActiveCell.Row - 1

    Do While curRow > 0
        DoEvents
        Cells(curRow, 1).Activate

        ' Go right past the last cell that contains a word
        Do Until IsEmpty(ActiveCell)
            DoEvents
            ActiveCell.Offset(0, 1).Activate
        Loop

        ' Come back left to the last cell that contains a word
        If ActiveCell.Column > 1 Then
            ActiveCell.Offset(0, -1).Activate
        End If

        ' Insert a new row below the current one for each
        Do Until ActiveCell.Column = 1 ' Move each non-empty cell to a new row and move left to the edge
            DoEvents
            ActiveCell.Offset(1).EntireRow.Insert
            Cells(ActiveCell.Row + 1, 1).Value = ActiveCell.Value
            ActiveCell.Clear
            ActiveCell.Offset(0, -1).Select
        Loop

        ' Go to the row above. Processing from the bottom up avoids re-processing lines we just inserted below.
        curRow = ActiveCell.Row - 1
    Loop
End Sub

相关内容