如何用Ctrl + shift + enter编写VBA用户定义函数从IF获取数组参数?

时间:2015-12-18 04:24:05

标签: arrays excel vba excel-vba user-defined-functions

我创建了一个名为 test

的函数
Function test(a() As Variant)
    Debug.Print "Type: "; TypeName(a)
    Debug.Print "lb: "; LBound(a)
    Debug.Print "ub: "; UBound(a)
    test = a(UBound(a))
End Function

输入

时没关系
=test({4,5,6,8,9})

在一个单元格中。它返回9。

我们在工作表上有一些数据。

   A  B
1  1  3
2  0  6
3  1  9
4  0  7
5  1  8

我使用ctrl + shift +在单元格中输入以下公式。

{=test(IF(A1:A5=1,B1:B5))}

我认为数组会传递到 test 但它不起作用。它可以像往常一样返回 LBound(a) UBound(a),但 test = a(UBound(a))会失败。

有什么问题?如何编写写VBA用户定义函数以从IF获取数组参数。

1 个答案:

答案 0 :(得分:2)

这两个例子之间有一个基本的区别。 =test({4,5,6,8,9})传递1-D数组,{=test(IF(A1:A5=1,B1:B5))}传递2-D数组。您的代码设置为仅处理一维数组,因此第二个示例失败。

如何解决这个问题将完全取决于您真正希望UDF做什么。对于该示例,您可以使用Transpose将输入强制转换为1-D,但这可能仅限于一般情况。可能更好地测试参数以确定其尺寸和相应的过程