2013-02-11 159 views
1

有谁知道如何使用工作基于呼叫中的VBA函数SUMPRODUCT?基于Excel SUMPRODUCT用VBA条件

这工作得很好,在N列,其中L列中包含“Y”和col A包含不同的值对colķ求和值...

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

但我希望能够应用更多逻辑不仅仅是一个<>在我的第二个标准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 

回答

3

我觉得你MatchNames阵列必须你的建议(因为它似乎返回值行相当于 - 它没有按与SUMPRODUCT中的其他值列无关)。

我不知道你怎么转,在VBA,但如果你不能这样做,那么在SUMPRODUCT转像

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

但使用移调意味着公式现在需要“阵列进入”与CTRL+SHIFT+ENTER

...或者你可以使用MMULT将乘以1×100范围由100X1,即

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

为后面的公式工作总和范围 - 输入!N1:N100 - 必须全部数字

+0

Ahhhh是的,谢谢。棒极了。我在返回之前尝试了在代码中进行转置,这意味着我不能仅仅将对象作为一个bool数组返回,而是在公式中进行转置。谢谢!! – Mottster 2013-02-11 17:02:21

+1

你可以让你的UDF返回一个二维数组(1列和n行),而不是使用移调。如果你返回1和0而不是布尔值,你也不需要 - 。 – 2013-02-11 17:31:57