基于VBA的条件下的Excel SUMPRODUCT

时间:2013-02-11 16:14:02

标签: excel vba excel-vba

是否有人知道如何在基于 工作表 的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

1 个答案:

答案 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 - 必须全部为数字