[英]Sumifs from an Array in Excel VBA
我想从一个数组中求和,但是我不确定如何引用数组中的完整列。 例如,我在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列加起来,其中TT列等于“ J”,答案是23。但是在代码中,我将每一列分配给VBA中的单独Range。 我想将两列都分配给一个数组,并从该数组中进行求和。 然后,代码的第一部分如下所示:
Dim s() As Variant
ReDim s(1 To 10, 1 To 2)
s = Range("A2:B11")
然后如何在sumifs函数中引用数组的列? (sumifs函数中的前两个条目)
e = WorksheetFunction.SumIfs(?, ?, "J")
最后,我将使用更大的数据集,如果可能的话,我不想创建大量单独的Ranges,而不会创建一个数组。
您可以创建一个自定义函数来执行此操作:
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
感谢您的评论和答案。 我不必使用数组,但这是我的首选,并且保持范围很好。 我确实发现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
这也给了我我想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.