VBA - 为什么 VBA UDF 与本机 Excel 函数相比如此慢?

Fra*_*a92 2 excel vba excel-formula

假设我编写了以下 VBA UDF:

Function TestFunction()
    TestFunction = 0
End Function
Run Code Online (Sandbox Code Playgroud)

然后我将它用于工作表中的前 100000 行。执行需要几分钟。

相反,如果我对相同数量的行使用 TODAY() ,则执行只需 3-4 秒。

谁能告诉我为什么以及是否有办法加速 UDF?

谢谢你!

Mat*_*don 5

几个原因。

VBA 函数需要脱离 UI/主线程按顺序运行,并且编译后的 p 代码需要由 VBA 运行时解释。

本机函数是本机的。它们(大概是——据我所知,它们是用 C++ 编写的)已经编译为易于执行的机器代码,不需要重新编译和/或解释。一些本机函数还可以利用多线程和“后台”计算。

至于加速您的 UDF,我们需要查看您的 UDF。一个除了分配文字返回值之外什么也不做的函数,没有太多优化空间,不是吗?

UDF 很棒。但它们并不是灵丹妙药。如果我想将值写入0A1:A1000000我就会这么做Sheet1.Range("A1:A1000000").Value = 0,而且几乎是即时的。

如果您要计算数十万个 UDF,请考虑查看宏而不是 UDF。