我想知道,在工作簿或工作表之间传输大量单元格(大约100 000个单元格 - 10 000 x 10)会更有效:
1.复制和粘贴为值:
rng1.Copy
rng2.PasteSpecial xlValues
Application.CutCopyMode=False
2.仅传递值为.Value:
rng2.Value = rng1.value
'The ranges will be predefined to be the same size
感谢您的帮助!
答案 0 :(得分:4)
我很确定你的第二个选项是最好的,但格式化不会被转移。您可能需要考虑使用Value2
,而不是使用Value
提高性能。
rng2.Value2 = rng1.value2
修改1
经过一些测试后,我很惊讶地发现复制/粘贴速度更快,下面的测试速度提高了约5倍,但这是一个大多数空的范围。此外,Value2
很快就会出现内存不足错误。话虽这么说,Value2
是更清晰的代码,它不会消除你的剪贴板内容,需要考虑的事情。
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub test()
Dim r1, r2 As Range
Dim t As Long
Set r1 = Sheets("S1").Range("A1:Z100000")
Set r2 = Sheets("S2").Range("A1:Z100000")
'Method1
t = GetTickCount
r1.Copy
r2.PasteSpecial xlValues
Debug.Print GetTickCount - t
'Method 2
t = GetTickCount
r2.Value2 = r1.Value2
Debug.Print GetTickCount - t
End Sub
修改2
之前的测试大多是空的。使用表填充范围并使用内容填充表格显示Value2
处理整个范围的速度快〜40%,但它始终处理整个范围。我怀疑差异可能是复制/粘贴具有更肤浅的优势,从而在存在空单元格时实现性能提升。