API reference · Finance

Sum

Adds numeric values from a vector or the first column of a 2D array.

FunctionFinance→DoubleSource L16

Signature#

VBA
Function Sum(ByVal vArr As Variant) As Double

Parameters#

ParameterVBA typeDefaultDescription
vArrVariantByValRequiredInput 1D array or 2D array. For 2D input, only its first column by lower bound is included.

Returns#

Double. The sum of accepted numeric values, or 0 when no values qualify or the input shape is rejected.

Example#

SEE THE TRANSFORMATIONSum the numeric values
Before
values1D · (8,)

Indices 0..7 · one dimension

01234567
10“20”-5EmptyNull#N/A“n/a”True
After
Return valueValues / state

No array dimensions

ItemValue
Sum25

Numeric text “20” contributes 20. Empty, Null, error, nonnumeric text and Boolean values are skipped.

Shaded headers are array indices, not data. Quoted cells are text. Values shown are derived from the source, not an Excel execution.

VBA
Option Explicit

Public Sub ExampleFinanceSum()
    Dim f As New Finance
    Dim values As Variant
    values = VBA.Array(10, "20", -5, Empty, Null, CVErr(xlErrNA), "n/a", True)
    Debug.Print f.Sum(values) '25
End Sub

Behavior and edge cases#

Performance#

O(n) time for n rows in the first column, with O(1) accumulator state. The 1D-to-2D normalization allocates O(n) elements; passing a Variant array ByVal can also require an array copy.

View implementation
VBA
Function Sum(ByVal vArr As Variant) As Double
    'Returns the sum of numeric values in a column vector

    Dim lRow                    As Long
    Dim lCol                    As Long
    Dim vValue                  As Variant
    Dim dblSum                  As Double

    If Not IsArray(vArr) Then Exit Function
    If Arr.DimCounter(vArr) = 1 Then vArr = Arr.DimExpand(vArr)
    If Arr.DimCounter(vArr) <> 2 Then Exit Function

    lCol = LBound(vArr, 2)

    For lRow = LBound(vArr, 1) To UBound(vArr, 1)
        vValue = vArr(lRow, lCol)
        If Not IsError(vValue) Then
            If Not IsNull(vValue) Then
                If Not IsEmpty(vValue) Then
                    If IsNumeric(vValue) Then dblSum = dblSum + CDbl(vValue)
                End If
            End If
        End If
    Next lRow

    Sum = dblSum
End Function