API reference · Finance

Count

Counts non-empty first-column values, optionally restricting the count to numeric values.

FunctionFinance→LongSource L76

Signature#

VBA
Function Count(ByVal vArr As Variant, Optional ByVal bNumeric As Boolean = False) As Long

Parameters#

ParameterVBA typeDefaultDescription
vArrVariantByValRequiredInput 1D array or 2D array. Only the first column by lower bound is examined for 2D input.
bNumericBooleanByValFalseFalse counts values whose CStr representation is non-empty. True additionally requires IsNumeric(value).

Returns#

Long. Number of accepted values. Returns 0 for rejected shapes or when no values qualify.

Example#

SEE THE TRANSFORMATIONCompare the two counting modes
Before
values1D · (8,)

Indices 0..7 · one dimension

01234567
0“0”“”EmptyNull#N/A“text”True
After
Return valuesValues / state

No array dimensions

ItemValue
Count(values)4
Count(values, True)2

Default mode counts 0, “0”, “text” and True. Numeric-only mode counts 0 and “0”.

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 ExampleFinanceCount()
    Dim f As New Finance
    Dim values As Variant
    values = VBA.Array(0, "0", "", Empty, Null, CVErr(xlErrNA), "text", True)
    Debug.Print f.Count(values)       '4: 0, "0", "text", True
    Debug.Print f.Count(values, True) '2: 0, "0"
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 Count(ByVal vArr As Variant, Optional ByVal bNumeric As Boolean = False) As Long
    'Counts non-empty values, or only numeric values when bNumeric is True

    Dim lRow                    As Long
    Dim lCol                    As Long
    Dim vValue                  As Variant
    Dim n                       As Long

    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 Len(CStr(vValue)) > 0 Then
                        If bNumeric Then
                            If IsNumeric(vValue) Then n = n + 1
                        Else
                            n = n + 1
                        End If
                    End If
                End If
            End If
        End If
    Next lRow

    Count = n
End Function