【问题标题】:Speed up simple user defined functions加速简单的用户定义函数
【发布时间】:2015-09-02 02:44:37
【问题描述】:

在 Excel VBA 中编写的用户定义函数的运行速度似乎比在工作表单元格中简单编写的函数慢得多。有没有办法让它们运行得更快?例如,我有一个非常简单的用户定义函数:

Function myweekday(mydate As Double)
    myweekday = Weekday(mydate)
End Function

基本上它与内置的 =weekday() 函数做同样的事情。然而,在 50,000 个单元上运行此程序大约需要 5 秒来计算,而简单地使用内置函数则需要几分之一秒。

我能做些什么来让这样的用户定义函数运行得更快?

【问题讨论】:

  • 为什么要创建一个功能比工作表WEEKDAY function 或VBA Weekday function 少的UDF?
  • @Jeeped 我唯一的猜测是 Alex 最终想让 UDF 变得更复杂,但他正在研究是否有可能在非常基本的东西上获得他们想要的 UDF 速度。跨度>
  • @Jeeped 是的,rwilson 是正确的。当然,UDF 是没有意义的,但我想看看像这样简单的东西是否能以不错的速度运行。

标签: vba optimization user-defined-functions


【解决方案1】:

您可以改为将值作为范围传递,并让它一次返回数组中的所有值。我刚刚在 50,000 行上进行了尝试,它立即返回了所有值。您需要使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    相关资源
    最近更新 更多