如何编写VBA用户定义的函数从IF中采取数组参数与Ctrl + Shift + Enter?

我创build了一个名为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。

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

  AB 1 1 3 2 0 6 3 1 9 4 0 7 5 1 8 

我用ctrl + shift +在单元格中input下面的公式。

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

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

问题是什么? 我怎样才能写一个写入VBA用户定义的函数从IF获取数组参数。

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

如何解决这个问题完全取决于你真正想要UDF做什么。 例如,您可以使用Transpose强制input为1-D,但这可能会限制一般情况。 可能会更好地testing参数来确定其维度和相应的过程