Excel VBA:将计算结果数组作为参数传递给函数
Posted
技术标签:
【中文标题】Excel VBA:将计算结果数组作为参数传递给函数【英文标题】:Excel VBA: Passing a calculation result array as an argument to a function 【发布时间】:2016-03-30 20:22:22 【问题描述】:我有一个接受数组的 VBA 函数,如果我向它传递一个引用,例如 A1:A10
,它会很好地工作。它不接受“公式”参数,例如A1:A10+1
或A1:A10^2
,生成的单元格包含#VALUE
。
许多 excel 函数都支持这一点,例如 linet(...) 我可以编写以下公式来获得四阶拟合,而无需手动列出 X
参数的四列。
=LINEST( B1:B10, A1:A10^1,2,3 )
我的函数声明是:
Function FFT(ByRef A) As Variant
我希望 Excel 计算表达式并将结果传递给函数。 Excel VBA无法做到这一点吗?
【问题讨论】:
【参考方案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
范围参数 A1:E1 按预期出现,Variant/Object/Range
。使用 VBA 编辑器中的 View-->Locals 窗口进行查看。
现在,如果您想在 到达您的函数之前将计算应用于范围,您仍然可以。
考虑公式=CalculateThis(A1:E1^2)
。您期望的是一个包含五个值的数组,每个值都是平方的。但是如果你通过输入一个简单的enter
来输入这个公式,你得到的是一个单一的值而不是一个数组。 (奖金指向能解释为什么值为 9 的人。)
但是用control-shift-enter
输入相同的公式,你会得到预期的五个值的数组,每个值都是平方的。
如果您的范围和数组计算不完全匹配,您必须检查一些错误情况。例如=CalculateThis(A1:E1^1,2,3,4,5)
(使用control-shift-enter
输入)会得到预期的结果:
但是=CalculateThis(A1:E1^1,2,3)
没有:
(变量数组中的错误是可以检查的字符串“Error 2042”。)
【讨论】:
以上是关于Excel VBA:将计算结果数组作为参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章