1

有谁知道如何在基于工作表的 SUMPRODUCT 调用中使用 VBA 函数?

这很好用,将 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 函数进行了调试,它确实返回了一些“有用”的东西(即布尔数组),所以并不是该函数在中途被炸毁,但我得到了#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
4

1 回答 1

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

...或者您可以使用 MMULT 将 1x100 范围乘以 100x1,即

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

为了使后一个公式起作用,总和范围 - 输入!N1:N100 - 必须全部为数字

于 2013-02-11T16:31:10.613 回答