这个问题是我上一个问题的延伸/延续如何将 Excel 数据库从 1 行长重新排列为 3 行短行并自动重复该过程? Jason Lewis 对此做出了回答,对此我深表感谢。但作为 Excel 中“间接”函数的新手,我再次需要帮助:
例如:在工作表 A 中,第 1 行的每个单元格中都有以下数据(总共占用 72 个单元格):
A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 AA1 AB1 AC1 AD1 AE1 AF1 AG1 AH1 AI1 AJ1 AK1 AL1 AM1 AN1 AO1 AP1 AQ1 AR1 AS1 AT1 AU1 AV1 AW1 AX1 AY1 AZ1 BA1 BB1 BC1 BD1 BE1 BF1 BG1 BH1 BI1 BJ1 BK1 BL1 BM1 BN1 BO1 BP1 BQ1 BR1 BS1 BT1
按以下格式重新排列到表 B 中:
第 1 行:A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 AA1 AB1 AC1 AD1 AE1 AF1 AG1 AH1 AI1
第 2 行:AJ1 AK1 AL1 AM1 AN1 AO1 AP1 AQ1 AR1 AS1 AT1 AU1 AV1 AW1 AX1 AY1 AZ1 BA1 BB1 BC1 BD1 BE1 BF1 BG1 BH1 BI1 BJ1 BK1
第 3 行:BL1 BM1 BN1 BO1 BP1 BQ1 BR1 BS1 BT1
工作表 A(数据库工作表)有很多行(例如 3,000 行,每行有 72 个单元格包含数据),因此工作表 B(重新格式化的数据库)估计有 9,000 行(即 3 x 3,000)且长度不等。
感谢您的快速回复。
答案1
这个宏可以做到这一点
Sub AnotherGo()
Dim row As Integer
row = 1
Dim row2 As Integer
row2 = 1
Do While (True)
If (Worksheets("Sheet1").Range("A" & row) = "") Then
Exit Do
End If
Worksheets("Sheet2").Range("A" & row2 & ":AI" & row2).Value = Worksheets("Sheet1").Range("A" & row & ":AI" & row).Value
Worksheets("Sheet2").Range("A" & row2 + 1 & ":AB" & row2 + 1).Value = Worksheets("Sheet1").Range("AJ" & row & ":BK" & row).Value
Worksheets("Sheet2").Range("A" & row2 + 2 & ":I" & row2 + 2).Value = Worksheets("Sheet1").Range("BL" & row & ":BT" & row).Value
row = row + 1
row2 = row2 + 3
Loop
End Sub
Sheet1 中有 3 行
工作表 2 如下所示(宏运行后)