Excel SUMPRODUCT与基于VBA的条件

有谁知道如何使用基于工作表的呼叫SUMPRODUCT中的VBAfunction?

这可以正常工作,将列N中的值相加,其中列L包含“Y”,列A包含与列K不同的值。

=SUMPRODUCT(--(Input!L1:L100="Y"), --(Input!A1:A100<>Input!K1:K100), Input!N1:N100) 

但是我希望能够在我的第二个标准中应用更多的逻辑,而不仅仅是A <> K,像这样…

 =SUMPRODUCT(--(Input!L1:L100="Y"), --(MatchNames(Input!A1:A100,Input!K1:K100)), Input!N1:N100) 

我在我的VBA中有一个名为MatchNames的函数,但是我无法弄清楚为了工作需要返回什么。 我已经尝试返回一个布尔值,整数(设置为0或1)的数组,我已经尝试在返回它们之前转置结果,但没有任何工作。 我已经通过MatchNames函数进行了debugging,并且它确实返回了一些“有用的”(即一组布尔值),所以并不是该函数部分地被轰炸了,但是我得到了#VALUE! 当我尝试在SUMPRODUCT中使用它。

这是我的VBAfunction…

 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 

我认为你的MatchNames数组需要按照你的build议进行转置 (因为它似乎返回了一行值的等价物 – 它不适用于SUMPRODUCT中的其他值列)。

我不知道如何在VBA中转置,但是如果你不能这样做,那么就像SUMPRODUCT一样转置

=SUMPRODUCT(--(input!L1:L100="Y"),--TRANSPOSE(MatchNames(input!A1:A100,input!K1:K100)), input!N1:N100)

但是使用TRANSPOSE意味着公式现在需要通过CTRL+SHIFT+ENTER进行“数组input”

…或者你可以使用MMULT,乘以一个100×1的1×100范围,即

=MMULT(MatchNames(input!A1:A100,input!K1:K100)+0,input!N1:N100*(input!L1:L100="Y"))

为后面的公式工作的总和范围 – input!N1:N100 – 必须是数字