Arrays 如何使用ctrl+编写VBA用户定义函数,从IF获取数组参数;班次+;进入?

Arrays 如何使用ctrl+编写VBA用户定义函数,从IF获取数组参数;班次+;进入?,arrays,vba,excel,user-defined-functions,Arrays,Vba,Excel,User Defined Functions,我创建了一个名为test的函数 我打字的时候没关系 =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(a),但是test=a(UBound(a))失败 有什么

我创建了一个名为test的函数

我打字的时候没关系

=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(a),但是test=a(UBound(a))失败


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

这两个示例之间存在根本区别<代码> =test({4,5,6,8,9})通过一维数组,并且
{=test(如果(A1:A5=1,B1:B5))}
通过二维数组。您的代码设置为仅处理一维数组,因此第二个示例失败


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

=test{(如果(A1:A5=1,B1:B5))}
尝试一下这只是一个后续问题,我如何知道这是一个二维数组?这个数组使用了什么索引?cpearson.com上有很多很好的数组函数,包括查找数组的维数。要使其仅适用于二维,请尝试
test=a(UBound(a,1))
{=test(IF(A1:A5=1,B1:B5))}