是否有人知道如何在基于 工作表 的SUMPRODUCT调用中使用VBA功能?
这样可以正常工作,对列N中的值进行求和,其中列L包含“Y”,而col A包含与col K不同的值...
=SUMPRODUCT(--(Input!L1:L100="Y"), --(Input!A1:A100<>Input!K1:K100), Input!N1:N100)
但我希望能够在我的第二个标准中应用更多逻辑,而不仅仅是A&lt;&gt; K,就像这样......
=SUMPRODUCT(--(Input!L1:L100="Y"), --(MatchNames(Input!A1:A100,Input!K1:K100)), Input!N1:N100)
我的VBA中有一个名为MatchNames的函数,但我无法弄清楚它需要返回什么才能工作。我已经尝试返回一个布尔值,整数(设置为0或1)的数组,我已经尝试在返回结果之前调换结果,但没有任何工作。我已经通过MatchNames函数进行了调试,它确实返回了一些“有用”的东西(即一个布尔数组),所以并不是这个函数在某种程度上是在轰炸,但我得到了#VALUE!当我尝试在SUMPRODUCT中使用它时。
这是我的VBA功能...
Public Function MatchNames(ByVal rng1 As Range, rng2 As Range) As Boolean()
Dim blnOut() As Boolean
Dim k As Long
ReDim blnOut(rng1.Rows.Count - 1)
For k = 1 To rng1.Rows.Count
If rng1.Cells(k, 1).Value <> "" Then
If rng1.Cells(k, 1).Value <> rng2.Cells(k, 1).Value Then
blnOut(k - 1) = True
End If
End If
Next
MatchNames = blnOut
End Function
答案 0 :(得分:3)
我认为您的MatchNames数组需要按照您的建议进行转置(因为它似乎返回相当于一行值的值 - 这与SUMPRODUCT中的其他值列无关)。
我不知道你如何在VBA中转置它,但如果你不能这样做,那么转换为SUMPRODUCT,如
=SUMPRODUCT(--(input!L1:L100="Y"),--TRANSPOSE(MatchNames(input!A1:A100,input!K1:K100)), input!N1:N100)
但使用TRANSPOSE意味着公式现在需要使用CTRL+SHIFT+ENTER
...或者你可以使用MMX,它将1x100范围乘以100x1,即
=MMULT(MatchNames(input!A1:A100,input!K1:K100)+0,input!N1:N100*(input!L1:L100="Y"))
后一个公式用于求和范围 - 输入!N1:N100 - 必须全部为数字