编辑:解决方案- 请参阅下面的原始问题
在将像 {1,2,3} 这样的数组传递给 UDF 时,我发现需要考虑两件事:
语言环境 - 请参阅答案 1。德语系统上的列表分隔符(通常)是“;” 因此我需要使用 {1 ; 2 ; 3}。
传递的数组在函数中显示为二维数组。因此,它的第 n 个元素必须定位为 myArray(n, 1 )。忽略这一点给了我#VALUE!错误。
因此,一个简短的“选择案例”-UDF 可能如下所示:
Function SelCase(a1, a2, a3)
For i = 1 To UBound(a2)
If a2(i, 1) = a1 Then SelCase = a3(i, 1)
Next
End Function
称为(德国语言环境!):
=SelCase(A1;{1;2;3};{"a";"b";"c"})
根据 A1 在结果中给出“a”、“b”或“c”保持 1、2 或 3。
在这里可以找到更详细的“选择案例”-UDF 。
原始问题:
我想将像 {1,2,3,4} 这样的数组传递给 Excel 2002 中的用户定义函数 - 并且无法找到执行此操作的方法。
我使用的是德语版本,所以“,”是我的小数分隔符,并且还在水平(1D-)数组中分隔值- 编辑:这是错误的 -,而“;” 据我所知,将公式中调用的函数中的参数与工作表分开,并分离垂直(1D-)数组中的值。
我尝试了类似的东西
Function test(myArray)
Function test(myArray())
有类似的东西
=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)
在我的工作表中,但 Excel 总是要求我更正我的公式,例如“=test({1,234})”,这不是我想要的。
如果我尝试类似
=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray
作为表格中的公式,我得到一个#VALUE!错误。
我不能使用 paramArray,因为最后我必须将两个数组(大小可变)和一个值作为 3 个参数传递。我需要在工作表和 VBA 中使用什么语法来传递数组(未定义为范围)?
先感谢您!马丁·林登劳夫
编辑:
我正在尝试构建的是“Select Case”的简写 UDF,例如:
Function SelCase() As Variant
a1 = "b"
a2 = Array("a","b","c")
a3 = Array("e1","e2","e3")
For i = 0 To UBound(a2)
If a2(i) = a1 Then SelCase = a3(i)
Next
End Function
a1、a2、a3 未在函数中定义,而是通过函数调用传递,例如
=SelCase(A1;{"a","b","c"};{"e1","e2","e3"})
根据 A1 = "a"、"b" 或 "c" 给出 "e1"..."e3"。
我可以通过 CHOOSE() 和 MATCH() 实现这一点,但我经常需要它 -> 喜欢有一个不错的“短版”,顺便说一句。我想了解我在使用数组和 UDF 方面做错了什么……谢谢。
编辑2:
我在这里找到了“选择案例 UDF”的工作方法。一般的问题仍然存在:如何以一种 {1,2,3} 表示法将数组传递给 UDF(如果可能)。