簡體   English   中英

(VBA-Excel)高效傳輸大范圍的方法

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM