首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么每个循环比循环快?

为什么每个循环比循环快?
EN

Stack Overflow用户
提问于 2021-07-25 06:31:46
回答 1查看 897关注 0票数 0

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

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

EN

Stack Overflow用户

发布于 2021-07-25 08:15:01

你认为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,而显然更容易编写代码的代价是透明性。我把它当作品味的问题。

代码语言:javascript
复制
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

代码语言:javascript
复制
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次工作表。也许这就是你读到的不同之处。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68516116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档