2015-10-23 97 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