gpt4 book ai didi

excel - VBA Excel避免带有变量列的循环

转载 作者:行者123 更新时间:2023-12-04 21:04:10 30 4
gpt4 key购买 nike

我是第一次使用 VBA。到目前为止,我成功地建立了一个模型。但是,我仍然想加快计算速度(我已经关闭了 ScreenUpdating、EnableEvents、xlCalculationAutomatic、DisplayPageBreaks)。我在互联网上读到 for 循环非常耗时。不幸的是,我真的有很多。因此,我的问题:

假设我有这种类型的代码:

 For p = 1 To Periods
Demand(p) = Worksheets("Sheet1").Cells(3, 1 + p)
Next p

我的第一个问题:这个 for 循环真的会减慢运行时间吗?
第二个问题:如何重写它,从而加快计算速度?

我一直在尝试以下方法:
 Demand = Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(3, 2), Worksheets("Sheet1").Cells(3, 1 + Periods))

但不幸的是,这似乎不起作用。我已经用谷歌搜索了这个,但我似乎没有找到答案。

非常感谢您的帮助!

最佳答案

这不是 For需要时间的循环,这就是您在其中所做的。使用 Excel VBA,您可以做的最慢的事情之一就是与工作表交互。

您可以考虑的一个快速更改是:

With Worksheets("Sheet1")
For p = 1 To Periods
Demand(p) = .Cells(3, 1 + p)
Next p
End With

...这意味着您的代码知道它总是在处理同一个工作表,并且每次循环时都不必查找正确的工作表。您可能不会注意到太大的差异,但是您已经从每个周期查找一个工作表变成了每次运行一个。不过,您仍然可以在每个期间进行一次单元格查找。

不过,您可以对工作表进行一次调用:一次调用获取所有值并完全避免循环:
Demand = Worksheets("Sheet1").Cells(3, 2).Resize(1, Periods).Value

这将为您提供 Demand 中的 1 x Periods 数组.试试看 - 使用“查看...本地窗口”来查看您所拥有的。

关于excel - VBA Excel避免带有变量列的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28473173/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com