gpt4 book ai didi

excel - 使用 VBA 在 excel 文件表之间进行循环

转载 作者:行者123 更新时间:2023-12-04 11:38:11 25 4
gpt4 key购买 nike

我对 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 递增.
  • 行数是固定的。 2365
  • 不是在循环中复制,而是将值存储在一个数组中,然后一次性输出该数组。它将是 超快 .
  • 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 .运行代码 SampleModule1

    关于excel - 使用 VBA 在 excel 文件表之间进行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68790952/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com