Excel VBA中的数组的Sumifs

我想做一个数组的sumif,但我不知道如何引用数组中的完整列。 例如,我有以下数据在Excel中(在列A和B)和代码工作正常,

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列等于“J”,答案是23的RR列。但是在代码中,我将每列分配给VBA中的一个单独的范围。 我想分配两列到一个数组,并从数组中做sumifs。 代码的第一部分将如下所示,

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

然后,我如何在sumifs函数中引用数组的列? (sumifs函数中的前两个条目)

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

我将在最后工作一个更大的数据集,如果有可能,我不想创build一个单独的范围吨,但只有一个数组。

您可以创build一个自定义函数来执行此操作:

 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 
 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 

感谢您的意见和答案。 我不必使用数组,但这是我的第一select,并保持范围是好的。 我确实发现与范围正确。 我做了以下

  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 

这也给了我想要的东西。