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



我创建了一个名为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+enter在单元格中键入以下公式。

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

我认为一个数组被传递到测试中,但它不起作用。它可以像往常一样返回LBound(a)UBound。

问题出在哪里?如何编写一个编写VBA用户定义函数以从IF.

中获取数组参数

这两个例子之间有根本的区别。 =test({4,5,6,8,9})通过1-D阵列,而{=test(IF(A1:A5=1,B1:B5))}通过2-D阵列。您的代码被设置为只处理一维数组,所以第二个示例失败了。

如何解决这一问题将完全取决于您实际希望UDF做什么。例如,您可以使用Transpose将输入强制为1-D,但这可能仅限于一般情况。最好在参数中进行测试,以确定其尺寸并相应地处理

最新更新