在循环范围Vs中为数组分配相同的范围并循环数组时,性能(速度)会有任何差异吗?
答案 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
仅在过滤区域中搜索。如果那是我们想要的,这可以确定,但是如果我们只想保留过滤器并搜索整个范围,那么现实很快就会变得丑陋。