Excel:将数组传递给用户定义的函数(VBA)

编辑:解决scheme – 请参阅原始问题下面

在将{1,2,3}这样的数组传递给UDF时,我发现了两件事情要考虑:

  • 语言环境 – 请参阅答案1.德语系统(通常)上的列表分隔符是“;” 因此我需要使用{1 ; 2 ; 3}。

  • 传递的数组在函数中显示为2维数组。 因此,第n个元素必须以myArray(n, 1 )为目标。 无视这给了我#VALUE! 错误。

因此,一个简短的“select案例”-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"}) 

在结果中给出“a”,“b”或“c”取决于A1保持1,2或3。

在这里find一个更详细的“select案例”-UDF。


原来的问题:

我想传递一个像{1,2,3,4}这样的数组到Excel 2002中的用户定义的函数 – 而不是设法find这样做的方法。

我使用的是德语版本,所以“,”是我的小数点分隔符,也分隔水平(1D-)数组中的值– 编辑:这是错误的 ,“wheras”;“ 从表中分离公式中函数中的参数,并在垂直(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中需要什么语法来传递一个数组(它没有被定义为一个范围)?

先谢谢你! 马丁·林登劳夫

编辑:

我想要构build的是“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:

我在这里find了一个“select case UDF”的工作方法。 一般问题仍然存在:如何将一个{1,2,3} -notation数组传递给UDF(如果可能的话)。

你是这个意思吗?

Excel公式:

=sumArray({1,2,3,4,5},2,{9.5,8.7,7.3,6,5,4,3},D1:D11)

UDF:

 Function sumArray(ParamArray arr1() As Variant) As Double sumArray = WorksheetFunction.Sum(arr1(0)) + arr1(1) + _ WorksheetFunction.Average(arr1(2)) + WorksheetFunction.Sum(arr1(3)) End Function 

更新:

上面的代码和公式确实可以使用英国语言​​环境使用下面的设置。 如果出现错误,请从控制面板中replace符号或使用正确的列表分隔符和小数符号更新公式。

在这里输入图像描述