加速简单的用户定义函数

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