复制粘贴 VBA 从一个工作表到另一个工作表的范围循环并转置数据
Copy Paste VBA Range from one to another worksheet Loop and transpose the data
对于 Excel 中的模型,我想将工作簿中一个 sheet 中的数据复制并粘贴到工作簿中的另一个 sheet 中,并使用以下方法转置该数据的下一个循环。工作文件 CME 中的数据应粘贴到 RME 的工作文件中。数据的总行数是 2420。但是,由于复制和粘贴不同工作簿中的范围不同,步长也不同,我假设我应该使用两个不同的变量 i 和 j。前两行代码是没有循环的手动方式
当我尝试 运行 这段代码时,它会给我一个错误。第一个代码是一个例子,它应该如何在没有循环的情况下手动完成。此后循环开始。已经非常感谢可以帮助我解决这个问题的人。
文件示例:在Excel工作sheet CME:复制范围J2:J10以将其转移到工作sheet RME粘贴到B2:J2 所以里面有个转置函数很重要。对于下一个范围,我需要复制范围 J12:J20 以将其传输到 worksheet 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
我对你到底想做什么有点困惑,但这样做可以吗?:
第一个代码:不使用转置
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
注意: Copy/Pasting 和转置在更大的数据库上执行需要更长的时间。比较上面的两个代码示例:
- 首码:0,13秒
- 第二个代码:5,5秒
对于 Excel 中的模型,我想将工作簿中一个 sheet 中的数据复制并粘贴到工作簿中的另一个 sheet 中,并使用以下方法转置该数据的下一个循环。工作文件 CME 中的数据应粘贴到 RME 的工作文件中。数据的总行数是 2420。但是,由于复制和粘贴不同工作簿中的范围不同,步长也不同,我假设我应该使用两个不同的变量 i 和 j。前两行代码是没有循环的手动方式
当我尝试 运行 这段代码时,它会给我一个错误。第一个代码是一个例子,它应该如何在没有循环的情况下手动完成。此后循环开始。已经非常感谢可以帮助我解决这个问题的人。
文件示例:在Excel工作sheet CME:复制范围J2:J10以将其转移到工作sheet RME粘贴到B2:J2 所以里面有个转置函数很重要。对于下一个范围,我需要复制范围 J12:J20 以将其传输到 worksheet 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
我对你到底想做什么有点困惑,但这样做可以吗?:
第一个代码:不使用转置
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
注意: Copy/Pasting 和转置在更大的数据库上执行需要更长的时间。比较上面的两个代码示例:
- 首码:0,13秒
- 第二个代码:5,5秒