gpt4 book ai didi

excel - 如何调用在另一个 UDF 中返回数组的 UDF?

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

我在弄清楚如何从另一个 UDF 返回 UDF 中的数组时遇到了一些麻烦。这里的一个是简单的指数移动平均 UDF,我试图将数组返回到另一个 UDF,但我收到 #value 错误。我觉得有一个我没有看到的简单解决方案。非常感谢所有帮助,谢谢。

Function ema(arg1 As Variant, ByVal lngth As Long) As Variant
x = arg1
dim avg As Double

avg = 1

Dim arrema As Variant
arrema = Array()
ReDim arrema(1 To UBound(x, 1), 1 To 1)

For j = 1 To (UBound(x, 1) - lngth)
For i = (1 + j - 1) To (lngth + j - 1)
avg = (WorksheetFunction.Index(x, i, 1) + 1) * avg
Next i
arrema(j, 1) = avg ^ (1 / lngth)
avg = 1
Next j
'ema = avg ^ (1 / lngth)
ema = arrema
End Function

Function test(arg2 As Variant, xlength As Long)
Dim arra As Variant
'Call ema(arg2, xlength)
Dim arr As Variant
arr = Array()
ReDim arr(1 To UBound(arg2, 1), 1 To 1)

arra = ema(arg2, xlength)

For i = 1 To UBound(arg2, 1) - xlength
arr(i, 1) = arra(i, 1)
Next i

test = arr
End Function

最佳答案

如果您调用test来自范围为 arg1 的公式参数,那么您的问题是您正在处理 Range好像它是一个 Array调用 UBound(arg2,1)
将其更改为 UBound(arg2.Value,1)它会起作用。

进一步说明:

通过声明 arg#参数为 Variant允许使用 Range 调用 UDF的或 Array的。使用 As Range 中的任何一个可能会更好。或 As Variant() .

Function ema x = arg1 行避免了这个问题: 如果 arg1Range那么这将复制 Range 的默认属性,即 Value属性(property)给 x , 制作 x数组。如果 arg1Array然后它只是将该数组复制到 x .

净结果是 Function ema可以处理范围或数组。但是还有另一个问题:WorksheetFunction.Index(x, i, 1)一维数组将失败。改为WorksheetFunction.Index(x, i)或者更好Application.Index(x, i)为了避免这个问题。

关于excel - 如何调用在另一个 UDF 中返回数组的 UDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869186/

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