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

时间:2015-10-23 12:59:58

标签: arrays excel performance vba loops

在循环范围Vs中为数组分配相同的范围并循环数组时,性能(速度)会有任何差异吗?

2 个答案:

答案 0 :(得分:4)

通过数组循环比查看范围更快。

请参阅下面的测试:

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%。

希望这有帮助:)

答案 1 :(得分:0)

请注意,如果对range进行了过滤(上面有一些过滤器),则您通过Range(strRANGE_ADDRESS).Value获得的相应数组将仅包含过滤器显示的可见值!

这是Excel的一个非常讨厌的特性。

Excel过滤器是一个困扰。如果设置了Excel过滤器,则Range.Find仅在过滤区域中搜索。如果那是我们想要的,这可以确定,但是如果我们只想保留过滤器并搜索整个范围,那么现实很快就会变得丑陋。