在VBA中,已知的For Each循环将比For循环更快地遍历Collection,两种循环方法之间的时间差呈指数增长(?)作为Collection大小的函数。(当然,这假设迭代在Collection成员上是“有序的”。)
为什么它更快?For Each循环如何以比通过Collection中的索引更快的速度访问项
发布于 2021-07-25 08:15:01
你认为For Each比For 1 To快的假设是错误的。这两个循环通过一组数字,他们可以以相同的速度做。
在For Each变体中,数字标识集合中的对象,如Sheets(1)、Sheets(2)、Sheets(3)等。这些工作表没有在循环中加载或访问。他们只是被引用。
相比之下,For i = 1 to 3: Set Ws = Sheets(i)只需创建对工作表的引用。
因此,差异产生于您对所引用的对象所做的事情,而不是您引用它们的方式。For Each通常作为稍微简单一些的代码出现。但是,如果您希望引用ActiveSheet.Cells(3),您确实需要知道这将是C1还是A3,而显然更容易编写代码的代价是透明性。我把它当作品味的问题。
Dim Arr As Variant
Dim R As Long
Arr = Range("A1:A20")
For R = 1 To UBound(Arr)
Debug.Print Arr(R, 1)
Next R比
Dim Rng As Range
Dim Cell As Range
Set Rng = Range("A1:A20")
For Each Cell in Rng
Debug.Print Cell.Value
Next Cell但这是因为第二段代码对第一段代码引用了20次工作表。也许这就是你读到的不同之处。
https://stackoverflow.com/questions/68516116
复制相似问题