====== Microsoft Excel - Macros - Sum - Sum Sequentially ====== ' Returns the sum of all oArrWithValues for all vCrit found within the array oArrWithCrit. Function ArraySumIfSequential(oArrWithCrit As Variant, vCrit As Variant, oArrWithValues As Variant) Dim vArr1 As Variant Dim vArr2 As Variant Dim lRow As Long If (UBound(oArrWithCrit) - LBound(oArrWithCrit)) = (UBound(oArrWithValues) - LBound(oArrWithValues)) Then For lRow = LBound(oArrWithCrit, 1) To UBound(oArrWithCrit, 1) If oArrWithCrit(lRow, 1) = vCrit Then ArraySumIfSequential = ArraySumIfSequential + oArrWithValues(lRow, 1) End If Next Else ArraySumIfSequential = "Criteriarange and sum range must be of same length" End If ' Clear all objects. Set vArr1 = Nothing Set vArr2 = Nothing End Function or '=ArraySumIf(A1:A1000,"Foo",B1:B1000) Function RangeSumIf(oRngWithCrit As Range, vCrit As Variant, oRngWithValues As Range) Dim vArr1 As Variant Dim vArr2 As Variant Dim lRow As Long If oRngWithCrit.Rows.Count = oRngWithValues.Rows.Count Then vArr1 = oRngWithCrit.Value vArr2 = oRngWithValues.Value For lRow = LBound(vArr1, 1) To UBound(vArr1, 1) If vArr1(lRow, 1) = vCrit Then RangeSumIf = ArraySumIf + vArr2(lRow, 1) End If Next Else RangeSumIf = "Criteriarange and sum range must be of same length" End If ' Clear all objects. Set vArr1 = Nothing Set vArr2 = Nothing End Function