excel - VBA - 为什么 VBA UDF 与 native Excel 函数相比这么慢?

标签 excel vba excel-formula

假设我编写了以下 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/

相关文章:

vba - 如何在 Excel VBA 函数中允许通配符 * 在字符串中查找单词?

vba - 配置作业编号以包含前缀、年、月和下一个序号

arrays - 从子例程返回数组给出 : Compile error: Can't assign to array

vba - Excel VBA 文本格式

excel - 在 MS Excel 中,我需要自动而不是手动删除每个备用行,如何使用 EXCEL 来完成此操作?

excel - 在多列中查找条件,并对每个匹配值的偏移量求和

arrays - 检查字符串是否缩写并复制完整字符串。 (Vba)

vba - `XlFileFormat`枚举代码-4143和56有什么不同?

arrays - 一致随机数的命名范围

excel - 使用带有六个条件的图标集的条件格式