2015-10-23 187 views

回答

1

循環遍歷數組比遍歷範圍要快得多。

見下面我的測試:

Option Explicit 

Const strRANGE_ADDRESS As String = "A1:A100000" 

Sub LoopRangeAddOne() 

    Dim r As Range 
    Dim lStart As Double 
    Dim lEnd As Double 

    lStart = Timer 

    For Each r In Range(strRANGE_ADDRESS) 
     r.Value = r.Value + 1 
    Next r 

    lEnd = Timer 

    Debug.Print "Duration = " & (lEnd - lStart) & " seconds" 

End Sub 

Sub LoopArrayAddOne() 

    Dim varArray As Variant 
    Dim var As Variant 
    Dim lStart As Double 
    Dim lEnd As Double 

    lStart = Timer 

    varArray = Range(strRANGE_ADDRESS).Value 
    For Each var In varArray 
     var = var + 1 
    Next var 
    Range(strRANGE_ADDRESS).Value = varArray 

    lEnd = Timer 

    Debug.Print "Duration = " & (lEnd - lStart) & " seconds" 

End Sub 

結果:

LoopRangeAddOne持續時間=2.2734375秒

LoopArrayAddOne持續時間=0.08203125秒

這使得通過陣列的速度比96.39%循環通過一個循環。

希望這會有所幫助:)

+0

謝謝..我會使用這種方法,然後.. – Shan

+0

你有更多的價值,差距會更大。確保你的循環仍然有效(例如儘快退出)。 – Kyle

+0

@ tech1234 - 如果您開啓ScreenUpdating,製作計算手冊,並在不是活動工作表的工作表上執行,我很樂於看到範圍方法的時間會發生什麼。 – Sercho