[英]Excel VBA: More efficient way to compare values with formulas for large range
[英](VBA-Excel) Efficient way to transfer a large range
我想知道,在工作簿或工作表之間傳輸大量單元格(大約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
我在這里先向您的幫助表示感謝!
我很確定你的第二個選項是最好的,但格式化不會被轉移。 您可能希望考慮使用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%,但它始終處理整個范圍。 我懷疑差異可能是復制/粘貼具有更膚淺的優點,從而在存在空單元格時實現性能提升。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.