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+1A1: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:将计算结果数组作为参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

Excel:通过单元格引用将数组参数传递给公式

VBA ADO 将数组参数传递给存储过程

Microsoft Access VBA 将参数传递给报表

VBA 将日期参数传递给 SQL Server 存储过程

PL/SQL:将字符串的“数组”作为参数传递给 sql

将参数传递给查询访问 VBA