如何使用 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,但这对于一般情况可能是有限的。可能更好地测试参数以确定其尺寸并相应地处理
我创建了一个名为 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,但这对于一般情况可能是有限的。可能更好地测试参数以确定其尺寸并相应地处理