【发布时间】:2017-11-17 11:40:27
【问题描述】:
我已经看过一个类似的解决方案here,但不知何故我仍然无法让我的代码工作。
我想将数组公式的输出作为输入传递给 UDF,对其进行处理并从中返回一个值。假设只需将所有项目添加到数组中并返回值作为示例。我的主要问题是如何将数组公式的输出传递给 UDF 并在 UDF 中处理它。
'Public Function Test1(ParamArray Parm1() As Variant) As Integer
'Dim i, j
'i = 0
'For j = LBound(Parm1) To UBound(Parm1)
'
' i = i + Parm1(j)
'
'Next j
'Test1 = i
'End Function
Public Function Test1(Parm1 As Variant) As Integer
Dim i, j
Dim tmparray() As Variant
tmparray = Parm1
For j = LBound(tmparray, 1) To UBound(tmparray, 2)
i = i + tmparray(j)
Next j
Test1 = i
End Function
上面注释的代码不起作用。我试图通过引用粘贴在其下方的提到的解决方案来修改它,但我仍然无法使其工作。
在 Excel 电子表格中,我将 {=Test1(ROW(C1:C4))} 作为数组公式传递给它,但它返回 #VALUE!
在上面的代码(注释的代码)中,如果我通过下面的 sub 进行测试和调试,它可以正常工作,但是当从像 {=Test1(ROW(C1:C4))}它这样的 Excel 数组公式调用时,它会返回 #VALUE!
Sub check()
j = Test1(1, 2)
End Sub
有人可以帮我进一步吗?
【问题讨论】:
-
有无数的事情可能是错误的。您是否尝试过单步执行代码?您是否收到任何错误 - 如果有,错误是什么,在哪里?您传递给函数的数组是什么样的?阅读more here。
-
感谢您的意见。该数组看起来像上面提到的数组公式中的 ROW(C1:C4) Excel 函数返回的那样。因此,当我评估函数时,它看起来像 Test1({1;2;3;4})
-
我不确定您是如何做到这一点的?
ROW(C1:C4)返回1,而不是数组(1, 2, 3, 4)。 -
将此:
For j = LBound(tmparray, 1) To UBound(tmparray, 2)更改为:For j = LBound(tmparray, 1) To UBound(tmparray, 1)。请注意,它仅在ROW返回二维数组时才有效。如果你同样使用COLUMN,它会失败,因为你有一个一维数组。