2015-02-23 126 views
0

我想做一個數組的sumif,但我不知道如何引用數組中的全列。例如我已經在Excel以下數據(在列A和B),並且工作正常代碼,Excel中數組的SUMIF VBA

RR TT 1 J 2 K 3 J 4 K 5 J 5 K 6 J 7 K 8 J 9 K

Sub test() 
Dim s As Range 
Dim s2 As Range 
Set s = Range("A2:A11") 
Set s2 = Range("B2:B11") 
e = WorksheetFunction.SumIfs(s, s2, "J") 
MsgBox e 
End Sub 

此求和RR的列,其中TT列等於「J」和答案是23.但在代碼中,我將每列分配給VBA中的一個單獨的範圍。我想將兩列分配給一個數組,並從數組中進行sumifs。代碼的第一部分然後看起來如下,

Dim s() As Variant 
ReDim s(1 To 10, 1 To 2) 
s = Range("A2:B11") 

然後我如何在sumifs函數中引用數組的列? (在SUMIFS函數的前兩條)

e = WorksheetFunction.SumIfs(?, ?, "J") 

我將在一個更大的數據集結束工作,如果可能的話我想不會創建一個單獨的噸範圍,但只是一個數組。

+1

您不能 - SUMIF(S)不能與數組一起使用,只能使用範圍。 – Rory 2015-02-23 13:28:00

+0

@Rory寫道,你不能。您需要編寫自己的循環數組。 – 2015-02-23 13:47:26

+0

爲什麼你想要使用數組呢? – Rory 2015-02-23 14:07:42

回答

1

你可以創建一個自定義函數來做到這一點:

Public Function SumIf(lookupTable() As Variant, lookupValue As String) As Long 
    Dim I As Long 

    SumIf = 0 

    For I = LBound(lookupTable) To UBound(lookupTable) 
     If lookupTable(I, 1) = lookupValue Then 
      SumIf = SumIf + lookupTable(I, 2) 
     End If 
    Next I 
End Function 
1
Sub M_snb() 
    msgbox [sum((A1:A9)*(B1:B9="J"))] 
End Sub 

Sub M_snb() 
    msgbox [sumproduct((A1:A9)*(B1:B9="J"))] 
end sub 

Sub M_snb() 
    msgbox [sum(if(B1:B9="J",A1:A9,0))] 
end sub 
0

感謝您的意見和答案。我不必使用數組,但它是我的第一選擇,並保持範圍是好的。我確實發現了Ranges。我做了以下

Sub test() 
Dim s As Range 
Set s = Range("A2:B11") 
e = WorksheetFunction.SumIfs(s.Columns(1), s.Columns(2), "J") 
MsgBox e 
End Sub 

這也給了我我想要的。