我已经查看了类似的解决方案here,但不知怎的,我仍然无法使我的代码工作。
我想将一个数组公式的输出作为输入传递给UDF,处理它并从中返回一个值。假设只是添加数组中的所有项并返回值作为示例。我的主要问题是如何将Array Formula的输出传递给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
有人可以帮助我吗?
答案 0 :(得分:1)
这是制作UDF的方法,将所有数字加在一个范围内:
Public Function AlternativeSum(Parm1 As Range) As Long
Dim myCell As Range
Dim result As Long
For Each myCell In Parm1
result = myCell.Value + result
Next myCell
AlternativeSum = result
End Function
如果输入范围不包含数字,您可以考虑将输出更改为double
或返回一些特定信息。但总的来说它有效:
为了使其成为“你的方式”,你应该学习如何将范围转移到数组Array from Range in Excel VBA。这有点棘手。使用单行范围,请尝试这样:
Public Function Test1(Parm1 As Variant) As Integer
Dim i As Long
Dim j As Long
Dim tmparray As Variant
tmparray = Parm1
For j = 1 To 3
i = i + Parm1(1, j)
Next
Test1 = i
End Function