I would create UDF before think that way.
Sub test()
Dim a
With Cells(1).Resize(30, 5)
.Formula = "=randbetween(5,10)" '<- generate data
a = .Value
End With
MsgBox SumIfsArray(a, 1, 2, 10, 5, 8)
End Sub
Function SumIfsArray(a, SumCol, ParamArray Criteria()) As Double
Dim i As Long, ii As Long, flg As Boolean
For i = LBound(a, 1) To UBound(a, 1)
For ii = LBound(Criteria) To UBound(Criteria) Step 2
If a(i, Criteria(ii)) <> Criteria(ii + 1) Then flg = True: Exit For
Next
If Not flg Then SumIfsArray = SumIfsArray + Val(a(i, SumCol))
flg = False
Next
End Function
OOps, CountIfs...
Sub test()
Dim a
With Cells(1).Resize(30, 5)
.Formula = "=randbetween(5,10)" '<- generate data
a = .Value
End With
MsgBox CountIfsArray(a, 2, 10, 5, 8)
End Sub
Function CountIfsArray(a, ParamArray Criteria()) As Long
Dim i As Long, ii As Long, flg As Boolean
For i = LBound(a, 1) To UBound(a, 1)
For ii = LBound(Criteria) To UBound(Criteria) Step 2
If a(i, Criteria(ii)) <> Criteria(ii + 1) Then flg = True: Exit For
Next
If Not flg Then CountIfsArray = CountIfsArray + 1
flg = False
Next
End Function
Bookmarks