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

How to write VBA user defined function to take array argument from IF with ctrl+shift+enter?

我创建了一个名为 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})

在一个单元格中。它 returns 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))}

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

问题是什么?我如何编写一个 write VBA 用户定义的函数来从 IF.

中获取数组参数

这两个示例之间存在根本差异。 =test({4,5,6,8,9}) 传递一维数组,{=test(IF(A1:A5=1,B1:B5))} 传递二维数组。您的代码设置为仅处理一维数组,因此第二个示例失败。

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