gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:12:40 24 4
gpt4 key购买 nike

我创建了一个名为 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(a) 像往常一样,但 测试 = a(UBound(a)) 失败。

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

最佳答案

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

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

关于arrays - 如何编写 VBA 用户定义函数以使用 ctrl+shift+enter 从 IF 获取数组参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34348512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com