将“粘贴VBA范围”从一个工作表复制到另一个工作表中循环并转置数据

时间:2018-08-02 08:28:23

标签: excel vba loops transpose

对于Excel中的模型,我想将数据从工作簿中的一张工作表复制并粘贴到工作簿中的另一张工作表,并使用for next循环使用此数据。来自工作文件CME的数据应粘贴到RME的工作文件中。数据的总行数为2420。但是,由于复制和粘贴不同工作簿中的范围不同并且步长也不同,因此我假设我应该使用两个不同的变量i和j。前两行代码是手动执行的无循环操作

当我尝试运行此代码时,它将给我一个错误。代码的第一个示例说明了如何手动执行而没有循环。此后,循环开始。非常感谢可以帮助我解决此问题的人。

来自文件的示例:在Excel Worksheet CME中:复制范围J2:J10以将其传输到工作表RME以便粘贴到B2:J2上,因此在其中具有转置功能很重要。对于下一个范围,我需要复制范围J12:J20以将其传输到工作表RME,以粘贴到B3:J3上,依此类推,因此我需要创建一个循环吗?复制和粘贴范围有两个不同的大小调整。非常感谢!

我想出了以下公式:

Dim i As Long
Dim j As Long

Worksheets("CME").Range("J2:J10").Copy
Worksheets("RME").Range("B2").PasteSpecial Transpose:=True

Worksheets("CME").Range("J12:J20").Copy
Worksheets("RME").Range("B3").PasteSpecial Transpose:=True

For i = 11 To 2420 Step 10
    Worksheets("CME").Range (Cells(i + 11, 10)), Cells(i + 19, 10).Copy

    For j = 3 To 2420 Step 1
    Worksheets("RME").Range(Cells(j + 1, 2)).PasteSpecial Transpose:=True
    Next j

Next i

End Sub   

1 个答案:

答案 0 :(得分:1)

我对您究竟想做什么感到有些困惑,但这会做什么?

第一个代码:不使用转置

Sub Test()

Dim X As Long, Y As Long, Z As Long

Z = 2
For X = 2 To 2420 Step 10
    For Y = 2 To 10
        Sheets("RME").Cells(Z, Y).Value = Sheets("CME").Cells(X + (Y - 1), 10).Value
    Next Y
    Z = Z + 1
Next X

End Sub

第二个代码:使用转置

Sub Test()

Dim X As Long, Z As Long
Dim RNG1 As Range, RNG2 As Range

Sheets("CME").Activate
Z = 2
For X = 2 To 2420 Step 10
    Set RNG1 = Sheets("CME").Range(Cells(X, 10), Cells(X + 9, 10))
    Set RNG2 = Sheets("RME").Cells(Z, 2)
    RNG1.Copy
    RNG2.PasteSpecial Transpose:=True
    Z = Z + 1
Next X
Sheets("RME").Activate

End Sub

注意:复制/粘贴和转置需要更长的时间才能在更大的数据库上执行。比较上面的两个代码示例:

  • 第一个代码: 0.13秒
  • 第二个代码: 5.5秒