【发布时间】:2013-04-07 23:41:19
【问题描述】:
我在弄清楚如何从另一个 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({1,2,3,4,5,9},10)
-
不太确定我是否遵循,我在 arg1 中传递与 arg2 中相同的数组。
-
你传递了什么值来得到这个错误?
-
想要返回什么?数组是你将得到的并且不会在 Excel 中显示,除非你使用 sum 之类的聚合函数。
-
我刚刚编写了测试函数来专门弄清楚如何处理从另一个 UDF 中返回一个 UDF 的数组。下面的答案清除了我的问题,代码现在可以工作了。我在 'arg1' 和 'arg2' 中传递了一系列数据,并且只是在 'lngth' 和 'xlength' 中传递了 EMA 的长度。
标签: excel user-defined-functions vba