将一列转换为多行

将一列转换为多行

我只是想从 A 列中取出数据并将其放入 B 列第 1 行、C 列第 1 行和 D 列第 1 行。

我想将其从上到下分成三组。

例如:

Column A
1
2
3
4
5
1
1
2
3

我希望它看起来像这样

1 2 3
4 5 1 
1 2 3

并继续前进。

答案1

您可以使用公式来实现这一点。

=INDIRECT(ADDRESS((ROW($A1)-1)*3+COLUMN(A1),1))

将上述公式输入到空白单元格中。将其复制到右侧两个单元格,然后向下复制,直到开始出现零(删除这些)。

在这个公式中,A1指向要重新排列的列中的第一个项目。要更改列数,请3在公式中将其修改为其他内容。

答案2

以下是在 VBA 中执行此操作的一种方法(假设数据在列中A):

Option Explicit

Sub movetocolumns()
Dim i As Integer, iRow As Integer
Dim arrSource As Variant

'Set the first row
iRow = 1

With ActiveWorkbook.Worksheets("Sheet1")
    'get the data into an array from the first column
    arrSource = Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))

    'parse every value of the array and add the data to the next column
    For i = 1 To (UBound(arrSource) - UBound(arrSource) Mod 3) Step 3
        .Cells(iRow, 2) = arrSource(i, 1)
        .Cells(iRow, 3) = arrSource(i + 1, 1)
        .Cells(iRow, 4) = arrSource(i + 2, 1)
        iRow = iRow + 1
    Next i
    'add the remaining values
    Select Case UBound(arrSource) Mod 3
        Case 1  'one item to add
            .Cells(iRow, 2) = arrSource(i, 1)
        Case 2  'still two items to add
            .Cells(iRow, 2) = arrSource(i, 1)
            .Cells(iRow, 3) = arrSource(i + 1, 1)
        Case Else   'nothing to add
    End Select
End With
End Sub

答案3

您只需先将其转换为多列,然后选择列值并按 Ctrl + C 复制它们,然后选择一个单元格并右键单击以选择选择性粘贴 > 转置。

答案4

作为对 Ellesa 和 Joshua 解决方案的进一步扩展,以下内容将从 和 粘贴到工作表中的任意位置。从 开始的单列$G$93转换为从 开始的每行 10 个条目$M$93

=INDIRECT(ADDRESS(ROW($G$93)+(ROW($M93)-ROW($M$93))*10+(COLUMN(M93)-COLUMN($M$93)),COLUMN($G$93)))

相关内容