excel - 使用 VBA 在 excel 文件表之间进行循环
问题描述
我对 VBA 很陌生,有一个问题。对不起,如果这听起来很基本。我将不胜感激。我有一个包含 9 张工作表的 excel 文件(名称:总计、0、3、6、9、12、15、18、21)。首先,我想从工作表“0”、“3”、“6”、“9”、“12”、“15”、“18”、“21”按顺序复制每张工作表的第二行并粘贴它们在工作表“Total”的“A2:X2”到“A9:X9”行中。然后我想用第三行、第四行重复这个,直到第 365 行。
前两部分最简单的代码是这样的,但我想用 (for) 或任何其他东西将它写成一个循环,以使其易于使用。
Sub Copy_rows()
' copying the second rows:
Worksheets("0").Range("A2:X2").Copy Worksheets("Total").Range("A2:X2")
Worksheets("3").Range("A2:X2").Copy Worksheets("Total").Range("A3:X3")
Worksheets("6").Range("A2:X2").Copy Worksheets("Total").Range("A4:X4")
Worksheets("9").Range("A2:X2").Copy Worksheets("Total").Range("A5:X5")
Worksheets("12").Range("A2:X2").Copy Worksheets("Total").Range("A6:X6")
Worksheets("15").Range("A2:X2").Copy Worksheets("Total").Range("A7:X7")
Worksheets("18").Range("A2:X2").Copy Worksheets("Total").Range("A8:X8")
Worksheets("21").Range("A2:X2").Copy Worksheets("Total").Range("A9:X9")
'Copying the third rows:
Worksheets("0").Range("A3:X3").Copy Worksheets("Total").Range("A10:X10")
Worksheets("3").Range("A3:X3").Copy Worksheets("Total").Range("A11:X11")
Worksheets("6").Range("A3:X3").Copy Worksheets("Total").Range("A12:X12")
Worksheets("9").Range("A3:X3").Copy Worksheets("Total").Range("A13:X13")
Worksheets("12").Range("A3:X3").Copy Worksheets("Total").Range("A14:X14")
Worksheets("15").Range("A3:X3").Copy Worksheets("Total").Range("A15:X15")
Worksheets("18").Range("A3:X3").Copy Worksheets("Total").Range("A16:X16")
Worksheets("21").Range("A3:X3").Copy Worksheets("Total").Range("A17:X17")
End Sub
先感谢您。
解决方案
逻辑
- 寻找趋势。例如工作表名称..
0
-3
-6
...21
。它增加3
. - 行数是固定的。
2
至365
- 不是在循环中复制,而是将值存储在一个数组中,然后一次性输出该数组。这将是超快的。
- 每张纸上有
364
行、列和总共有几张。因此,您需要带有列的行数组来存储数据。24
8
364 * 8
24
代码
尝试这个。这段代码运行不到一秒钟。
Option Explicit
Sub Sample()
Dim Ar As Variant
Dim TotalRows As Long
'~~> 364 rows per sheet * 8 sheets
TotalRows = 364 * 8
ReDim Ar(1 To TotalRows, 1 To 24)
Dim i As Long
Dim j As Long
Dim k As Long
Dim rw As Long: rw = 1
'~~> Loop through the rows
For j = 2 To 365
'~~> Loop through 8 worksheets from 0 to 21
For i = 0 To 21 Step 3
'~~> Loop through the columns
For k = 1 To 24
Ar(rw, k) = Worksheets(CStr(i)).Cells(j, k).Value
Next k
'~~> Increment row in array
rw = rw + 1
Next i
Next j
'~~> Output to total worksheet
Worksheets("Total").Range("A2").Resize(UBound(Ar), 24).Value = Ar
End Sub
为了测试,我使用了这个Sample File。运行Sample
代码Module1
推荐阅读
- java - 使用 spring-data jpa 阅读视图 - hibernate AUTO JPA 生成类型
- python - 我可以使用 connectedComponents 或 findContours 更好地识别正方形吗?在 python 上使用 opencv
- android - 在 Play 商店控制台中获取设备屏幕分辨率的统计信息
- css - ie中的垂直对齐占位符
- java - 如何在不同的片段/活动中维护 android 中的会话?
- r - R中的冲突过滤器命令
- docker - 如何在docker中复制子文件夹
- javascript - 我们在 JSPDF 中有右边距属性吗?
- asp.net - 在 ASP.NET 中使用 Html.ActionLink() 与 asp 属性创建链接,例如
- python - python get tommorows date dd.mm.yy问题