微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA:为什么 For Each 循环比 For 循环快?

如何解决VBA:为什么 For Each 循环比 For 循环快?

在 VBA 中,众所周知,For Each 循环会比 Collection 循环更快地遍历 For,两种循环方法间的时间差呈指数增长(?)作为 Collection 大小的函数。 (当然,这假设迭代在 Collection 成员上是“有序的”。)

为什么速度更快? For Each 循环如何比通过 Collection 中的索引更快地访问项目?

解决方法

您认为 For EachFor 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 次。也许这就是您一直在阅读的差异。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。