我只是想从 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)))