User Tools

Site Tools


microsoft_excel:macros:sum:sum_binary

Microsoft Excel - Macros - Sum - Sum Binary

' 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, 1) Then
            If IsNumeric(oArrWithValues(i, 1)) Then
                ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
            End If
 
            ' Now that found run sequentially while same value
            i = i + 1
            J = J - 1
 
            Do While (i <= high)
                If vCrit = oArrWithCrit(i, 1) Then
                    If IsNumeric(oArrWithValues(i, 1)) Then
                        ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
                    End If
                    i = i + 1
                Else
                  Exit Do
                End If
            Loop
 
            Do While (J >= low)
                If vCrit = oArrWithCrit(J, 1) Then
                    If IsNumeric(oArrWithValues(i, 1)) Then
                        ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
                    End If
                    J = J - 1
                Else
                  Exit Do
                End If
            Loop
 
            Exit Do
        ElseIf vCrit < oArrWithCrit(i, 1) Then
            high = (i - 1)
        Else
            low = (i + 1)
        End If
    Loop
 
End Function

and

' 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, 1) Then
            ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
            ' Now that found run sequentially while same value
            i = i + 1
            J = J - 1
 
            Do While (i <= high)
                If vCrit = oArrWithCrit(i, 1) Then
                    ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
                    i = i + 1
                Else
                  Exit Do
                End If
            Loop
 
            Do While (J >= low)
                If vCrit = oArrWithCrit(J, 1) Then
                    ArraySumIf = ArraySumIf + oArrWithValues(i, 1)
                    J = J - 1
                Else
                  Exit Do
                End If
            Loop
 
            Exit Do
        ElseIf vCrit < oArrWithCrit(i, 1) Then
            high = (i - 1)
        Else
            low = (i + 1)
        End If
    Loop
microsoft_excel/macros/sum/sum_binary.txt · Last modified: 2021/08/04 15:45 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki