加速简单的用户定义函数
Speed up simple user defined functions
在 Excel VBA 中编写的用户定义函数似乎 运行 比简单地在工作表单元格中编写的函数慢得多。有没有办法让它们更快 运行?例如,我有一个非常简单的用户定义函数:
Function myweekday(mydate As Double)
myweekday = Weekday(mydate)
End Function
基本上它与内置的 =weekday() 函数做同样的事情。然而,运行在 50,000 个单元格上计算大约需要 5 秒,而仅使用内置函数只需几分之一秒。
我怎样做才能使用户定义的函数像这样 运行 更快?
您可以改为将值作为一个范围传入,然后 return 一次将所有值放入一个数组中。我刚刚在 50,000 行上尝试了这个,它立即 returned 所有值。您需要使用 CTRL + SHIFT + ENTER.
输入 UDF
Function myweekday(mydate As Range) As Variant
Dim vMydate As Variant
Dim vMyWeekDay As Variant
Dim i As Long
vMydate = mydate.Value2
ReDim vMyWeekDay(1 To UBound(vMydate), 1 To 1)
For i = 1 To UBound(vMydate)
vMyWeekDay(i, 1) = Weekday(vMydate(i, 1))
Next i
myweekday = vMyWeekDay
End Function
在 Excel VBA 中编写的用户定义函数似乎 运行 比简单地在工作表单元格中编写的函数慢得多。有没有办法让它们更快 运行?例如,我有一个非常简单的用户定义函数:
Function myweekday(mydate As Double)
myweekday = Weekday(mydate)
End Function
基本上它与内置的 =weekday() 函数做同样的事情。然而,运行在 50,000 个单元格上计算大约需要 5 秒,而仅使用内置函数只需几分之一秒。
我怎样做才能使用户定义的函数像这样 运行 更快?
您可以改为将值作为一个范围传入,然后 return 一次将所有值放入一个数组中。我刚刚在 50,000 行上尝试了这个,它立即 returned 所有值。您需要使用 CTRL + SHIFT + ENTER.
输入 UDFFunction myweekday(mydate As Range) As Variant
Dim vMydate As Variant
Dim vMyWeekDay As Variant
Dim i As Long
vMydate = mydate.Value2
ReDim vMyWeekDay(1 To UBound(vMydate), 1 To 1)
For i = 1 To UBound(vMydate)
vMyWeekDay(i, 1) = Weekday(vMydate(i, 1))
Next i
myweekday = vMyWeekDay
End Function