microsoft_excel:macro_sum_binary
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
microsoft_excel:macro_sum_binary [2016/07/11 11:33] – created peter | microsoft_excel:macro_sum_binary [2021/08/04 14:26] (current) – removed peter | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Microsoft Excel - Macro Sum Binary ====== | ||
- | <code excel> | ||
- | ' Returns the sum of all oArrWithValues for all vCrit found within the array oArrWithCrit. | ||
- | Function ArraySumIf(oArrWithCrit As Variant, vCrit As Variant, oArrWithValues As Variant) | ||
- | Dim low As Long | ||
- | low = LBound(oArrWithCrit) | ||
- | Dim high As Long | ||
- | high = UBound(oArrWithCrit) | ||
- | Dim i As Long | ||
- | Dim J As Long | ||
- | Dim result As Boolean | ||
- | | ||
- | ArraySumIf = 0 | ||
- | | ||
- | Do While low <= high | ||
- | i = (low + high) / 2 | ||
- | If vCrit = oArrWithCrit(i, | ||
- | If IsNumeric(oArrWithValues(i, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | End If | ||
- | | ||
- | ' Now that found run sequentially while same value | ||
- | i = i + 1 | ||
- | J = J - 1 | ||
- | | ||
- | Do While (i <= high) | ||
- | If vCrit = oArrWithCrit(i, | ||
- | If IsNumeric(oArrWithValues(i, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | End If | ||
- | i = i + 1 | ||
- | Else | ||
- | Exit Do | ||
- | End If | ||
- | Loop | ||
- | | ||
- | Do While (J >= low) | ||
- | If vCrit = oArrWithCrit(J, | ||
- | If IsNumeric(oArrWithValues(i, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | End If | ||
- | J = J - 1 | ||
- | Else | ||
- | Exit Do | ||
- | End If | ||
- | Loop | ||
- | | ||
- | Exit Do | ||
- | ElseIf vCrit < oArrWithCrit(i, | ||
- | high = (i - 1) | ||
- | Else | ||
- | low = (i + 1) | ||
- | End If | ||
- | Loop | ||
- | | ||
- | End Function | ||
- | </ | ||
- | |||
- | and | ||
- | |||
- | <code excel> | ||
- | ' Returns the sum of all oArrWithValues for all vCrit found within the array oArrWithCrit. | ||
- | Function ArraySumIfx(oArrWithCrit As Variant, vCrit As Variant, oArrWithValues As Variant) | ||
- | Dim low As Long | ||
- | low = LBound(oArrWithCrit) | ||
- | Dim high As Long | ||
- | high = UBound(oArrWithCrit) | ||
- | Dim i As Long | ||
- | Dim J As Long | ||
- | Dim result As Boolean | ||
- | | ||
- | ArraySumIf = 0 | ||
- | | ||
- | Do While low <= high | ||
- | i = (low + high) / 2 | ||
- | If vCrit = oArrWithCrit(i, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | ' Now that found run sequentially while same value | ||
- | i = i + 1 | ||
- | J = J - 1 | ||
- | | ||
- | Do While (i <= high) | ||
- | If vCrit = oArrWithCrit(i, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | i = i + 1 | ||
- | Else | ||
- | Exit Do | ||
- | End If | ||
- | Loop | ||
- | | ||
- | Do While (J >= low) | ||
- | If vCrit = oArrWithCrit(J, | ||
- | ArraySumIf = ArraySumIf + oArrWithValues(i, | ||
- | J = J - 1 | ||
- | Else | ||
- | Exit Do | ||
- | End If | ||
- | Loop | ||
- | | ||
- | Exit Do | ||
- | ElseIf vCrit < oArrWithCrit(i, | ||
- | high = (i - 1) | ||
- | Else | ||
- | low = (i + 1) | ||
- | End If | ||
- | Loop | ||
- | </ |
microsoft_excel/macro_sum_binary.1468236788.txt.gz · Last modified: 2020/07/15 09:30 (external edit)