【发布时间】:2018-04-07 16:10:00
【问题描述】:
我有一个计算平均支出的函数。循环从 x 天向下计算到 y 天。作为此功能的一部分,我必须使用特定范围内插一个数字。然而,这非常慢。
我读到加速代码的一种方法是将范围作为值而不是 Range 来读取,因为每次运行代码时都转到 Excel 会减慢 VBA 的速度。
这是真的吗?
我当前的代码。
Function AveragePayout(Time As Double, period)
Dim i As Integer
Dim sum As Double
Dim interpolate_surface As Range
Set interpolate_surface = Range("A1", "D4")
If Time < period Then
AveragePayout = 0
Else
For i = 1 To period
interpolated_val = Interpolation(interpolate_surface, 5, Time)
sum = sum + CustomPricer(interpolated_value)
Time = Time - 1
Next i
AveragePayout = sum / period
End If
End Function
我正在考虑将第 5 行更改为下面,然后在 VBA 矩阵/数组上运行插值,而不是在每个循环中返回 Excel 文档(这显然会大大减慢函数的速度:
Set interpolate_surface = Range("A1", "D4").Value2
或者有没有其他方法可以加快这个循环的运行速度?
非常感谢。
【问题讨论】:
-
如果我没记错 Range 将在循环中绑定到 excel 工作表,从而使其变慢(你可能知道)。通过读取值并循环遍历 .您是否还有其他原因寻求性能改进????
-
根本不是答案,但你应该学会使用
Option Explicit!这样可以避免您在一行使用interpolated_val,在下一行使用interpolated_value。 (最终可能比加速宏提供更多价值:)
标签: arrays vba performance loops for-loop