假设我编写了以下 VBA UDF:
Function TestFunction()
TestFunction = 0
End Function
然后我将它用于工作表中的前 100000 行。执行需要几分钟时间。
相反,如果我对相同数量的行使用 TODAY(),则执行只需 3-4 秒。
谁能告诉我为什么以及是否有加速 UDF 的方法?
谢谢!
最佳答案
几个原因。
VBA 函数需要在 UI/主线程之外按顺序运行,编译后的 p 代码需要由 VBA 运行时解释。
native 函数是 native 。它们(大概 - AFAIK 它们是用 C++ 编写的)已经编译为易于执行且不需要重新编译和/或解释的机器代码。一些 native 函数还可以利用多线程和“后台”计算。
至于加速您的 UDF,我们需要为此查看您的 UDF。一个除了分配文字返回值之外什么都不做的函数,没有太多优化空间吗?
UDF 很棒。但它们不是 Elixir 。如果我想将值 0
写入 A1:A1000000
,我会执行 Sheet1.Range("A1:A1000000").Value = 0
,那将是近乎即时的。
如果您要计算数十万个宏,请考虑研究宏而不是 UDF。
关于excel - VBA - 为什么 VBA UDF 与 native Excel 函数相比这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58291061/