Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel:将数组传递给用户定义函数(VBA)_Arrays_Excel_Vba_Parameter Passing_User Defined Functions - Fatal编程技术网

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

Arrays Excel:将数组传递给用户定义函数(VBA),arrays,excel,vba,parameter-passing,user-defined-functions,Arrays,Excel,Vba,Parameter Passing,User Defined Functions,编辑:解决方案-参见下面的原始问题 在将类似{1,2,3}的数组传递给UDF时,我发现需要考虑两件事: 区域设置-请参见答案1。德国系统上的列表分隔符通常为;因此我需要使用{1;2;3} 传递的数组在函数中显示为二维数组。因此,它的第n个元素必须以myArrayn 1为目标。无视这一点给了我价值!错误 因此,简短的select case UDF可能如下所示: Function SelCase(a1, a2, a3) For i = 1 To UBound(a2) If a

编辑:解决方案-参见下面的原始问题

在将类似{1,2,3}的数组传递给UDF时,我发现需要考虑两件事:

区域设置-请参见答案1。德国系统上的列表分隔符通常为;因此我需要使用{1;2;3}

传递的数组在函数中显示为二维数组。因此,它的第n个元素必须以myArrayn 1为目标。无视这一点给了我价值!错误

因此,简短的select case 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

可以找到更详细的select case UDF

原始问题:

我想将类似{1,2,3,4}的数组传递给Excel 2002中的用户定义函数- 不要设法找到这样做的方法

我使用的是德语版本,所以,是我的十进制分隔符,还分隔水平1D数组中的值-编辑:这是错误的-,wheras;从工作表中分离公式中调用的函数中的参数,并分离垂直一维数组中的值-据我所知

我试过类似的东西

Function test(myArray)
Function test(myArray())
=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)
=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray
有点像

Function test(myArray)
Function test(myArray())
=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)
=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray
在我的工作表中,但是Excel总是要求我更正我的公式,比如=test{1234},这不是我想要的

如果我尝试像

Function test(myArray)
Function test(myArray())
=test({1,2,3,4})
{=test({1,2,3,4})} (with ctrl+shift+enter)
=test({1;2;3;4})
=test(1,2,3,4)
=test(1;2;3;4) <- ok this would be for paramArray
a1、a2、a3未在函数中定义,但通过函数调用传递,如

=SelCase(A1;{"a","b","c"};{"e1","e2","e3"})
根据A1=a、b或c给出e1…e3

我可以通过CHOOSE and MATCH实现这一点,但我经常需要它->希望有一个好的简短版本,顺便说一句。我想了解我对数组和UDF的错误。。。谢谢

编辑2:

我找到了一种适用于selectcaseudf的工作方法。一般的问题仍然是:如果可能的话,如何将一种{1,2,3}符号的数组传递给UDF。

这就是你的意思吗

Excel公式:

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

UDF:

更新:

上面的代码和公式在使用UK语言环境和下面的设置时肯定有效。如果出现错误,请替换控制面板中的符号,或使用正确的列表分隔符和十进制符号更新公式


为什么要将数组传递给UDF?如果你解释你想做什么,我们可能会给你一个更好的方法来实现它。像这样的,是的,-见我上面的编辑。我不能复制你的例子;Excel不接受=sumArray{1,2,3,4,5},2,{9.5,8.7,7.3,6,5,4,3},D1:D11-它再次建议使用{12345}。数组传递到UDF的{1,2,3}符号有问题?转到控制面板/时钟、语言和区域/区域以及语言/其他设置…这应该会显示一个菜单,其中包含十进制符号、列表分隔符等选项。我怀疑您只需要用列表分隔符中选择的符号替换所有逗号:好,就是这样;我对我的问题做了最后的修改。我只是说:谢谢你帮助一个新手学习。