Excel VBA:将计算结果数组作为参数传递给函数

时间:2016-03-30 20:22:23

标签: excel vba excel-vba

我有一个接受数组的VBA函数,如果我传递A1:A10之类的引用它会很有用。它不接受"公式" A1:A10+1A1:A10^2等参数,结果单元格包含#VALUE

许多excel函数支持这一点,例如linest(...),我可以编写以下公式以获得第四顺序,而无需手动列出X参数的四列。

     =LINEST( B1:B10, A1:A10^{1,2,3} )

我的功能声明是:

     Function FFT(ByRef A) As Variant

我希望Excel能够评估表达式并将结果传递给函数。 Excel VBA无法实现这一点吗?

1 个答案:

答案 0 :(得分:1)

如果您从另一个VBA子程序或函数调用函数,Excel将不会为您解释范围计算。在调用函数之前,您必须自己在范围区域执行任何数据操作。

但只要您从工作表单元格中将该函数用作UDF,Excel将在您描述范围参数时解释它。在对范围应用任何计算时需要注意的是,您必须通过键入control-shift-enter来“标记”单元格公式以作为数组公式,以完成单元格公式。

考虑这个设置:

Option Explicit

Public Function CalculateThis(inRange) As Double
    Dim answer As Double
    answer = 0#
    CalculateThis = answer
End Function

enter image description here

范围参数A1:E1按预期进入,Variant/Object/Range。使用VBA编辑器中的View - > Locals窗口查看。

enter image description here

现在,如果您希望将计算应用到之前的范围内,那么它仍然适用于您的函数。

考虑公式=CalculateThis(A1:E1^2)。你期望的是一个由五个值组成的数组,每个值都是平方的。但是如果你输入一个简单的enter输入这个公式,你得到的是一个值而不是一个数组。 (奖励指向可以解释为什么值为9的人。)

enter image description here

但是输入与control-shift-enter相同的公式,你会得到五个值的预期数组,每个值都是平方的。

enter image description here

如果范围和数组计算不完全匹配,则必须检查某些错误情况。例如=CalculateThis(A1:E1^{1,2,3,4,5})(与control-shift-enter一起输入)可以获得预期的结果:

enter image description here

=CalculateThis(A1:E1^{1,2,3})没有:

enter image description here

(变量数组中的错误是您可以检查的字符串“Error 2042”。)