循环范围与循环数组之间的性能差异

Sha*_*han 1 arrays excel performance vba loops

循环遍历一个范围 Vs 将相同的范围分配给一个数组并循环一个数组时,性能(速度)会有什么不同吗?

小智 6

循环遍历数组比查看范围要快得多。

请参阅下面的我的测试:

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
Run Code Online (Sandbox Code Playgroud)

结果:

LoopRangeAddOne 持续时间 = 2.2734375 秒

LoopArrayAddOne 持续时间 = 0.08203125 秒

这使得循环数组比循环快 96.39%。

希望这可以帮助 :)

  • @Sercho 你必须把它们放在一个秤上,看看你需要什么。我不喜欢关闭计算,因为如果处理不当可能会将工作簿保留为手动(这是一个棘手的问题)但是是的,数组是有限制的。我认为使用数据数组我们将关注点数据和电子表格分开。当然,为了解决极限问题,可以使用多个数组方法。 (2认同)