我需要保持数据的顺序。因此,为了解释,我需要将数据从单元格
a1 至 b1、
a2 至 c1、
a3 至 d1、
a4 至 e1、
a5 至 f1、
a6 至 g1、
a7 至 h1、
a8 至 i1、
a9 至 B2
a10 至 C2
a11 至 D2
a12 至 E2
a13 至 F2
a14 至 G2
a15 至 H2
a16 至 I2
重复上述步骤,直到我查看完 A 列中的所有 24000 个条目
当然,有一种简单的方法可以通过宏或 vba 来实现这一点?也许最新版本中的某个功能已经可以做到这一点?
答案1
这是一个 VBA 解决方案:
Option Explicit
Private Sub ReArrangeCells()
Dim ws As Worksheet, LastRow As Long
Set ws = Excel.ActiveSheet
LastRow = Range("A65536").End(xlUp).Row
Dim i As Long, j As Long, FromCell As Range, ToCell As Range, sNewCol As String, sNewRow As String
For i = 1 To LastRow
Set FromCell = ws.Range("A" & i) 'the cell we want to move
sNewCol = IIf(i Mod 8 = 0, Chr$(72), Chr$((i Mod 8) + 64))
sNewRow = IIf(i Mod 8 = 0, (i \ 8), (i \ 8) + 1)
Set ToCell = ws.Range(sNewCol & sNewRow) 'the cell we want to copy the data to
FromCell.Copy ToCell
If i <> 1 Then FromCell.Clear
If i Mod 100 = 0 Then DoEvents
Next i
End Sub
答案2
这是一个解决方案。它假设以下内容:
- 所有原始数据都在 A 列
- B 列仅包含行的索引
公式:其中=INDIRECT(CONCATENATE("a",$B2*8 + col_offset))
col_offset 是列号(从零开始)。因此,在第一列中它将是=INDIRECT(CONCATENATE("a",$B2*8))
,在第 8 列中它将是=INDIRECT(CONCATENATE("a",$B2*8+7))
。
一张图片可以让事情更清楚:
编辑:新公式:=INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))
其中-2
和-3
是行和列偏移量。只需将其粘贴到您希望显示数据的所有单元格中即可。(此解决方案更好,因为现在可以删除 B 列)
答案3
VBA 答案最适合处理大量数据,但我要指出的是,您也可以使用“Transpose”通过复制/粘贴来完成此操作。对于小需求,这是一种简单的右键单击解决方案。这肯定适用于 2010,我相信 2007 也适用。
看来我还不能做图像......
- 垂直复制单元格
- 右键单击另一个单元格并使用“粘贴选项”下的第四个选项(看起来像两个直角的蓝色矩形)
在某些情况下会更快。