gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:21:34 26 4
gpt4 key购买 nike

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

在将 {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 here .

<小时/>

原始问题:

我想将 {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:

我找到了“select case UDF”的工作方法here 。一般问题仍然是:如何将一种 {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:

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

更新:

上面的代码和公式肯定可以使用英国区域设置和下面的设置。如果出现错误,请替换控制面板中的符号或使用正确的列表分隔符和小数点符号更新公式。

enter image description here

关于arrays - Excel:将数组传递给用户定义函数 (VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18185089/

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