VBA using ubound on a multidimensional array VBA using ubound on a multidimensional array vba vba

VBA using ubound on a multidimensional array


ubound(arr, 1) 

and

ubound(arr, 2) 


You need to deal with the optional Rank parameter of UBound.

Dim arr(1 To 4, 1 To 3) As VariantDebug.Print UBound(arr, 1)  '◄ returns 4Debug.Print UBound(arr, 2)  '◄ returns 3

More at: UBound Function (Visual Basic)


[This is a late answer addressing the title of the question (since that is what people would encounter when searching) rather than the specifics of OP's question which has already been answered adequately]

Ubound is a bit fragile in that it provides no way to know how many dimensions an array has. You can use error trapping to determine the full layout of an array. The following returns a collection of arrays, one for each dimension. The count property can be used to determine the number of dimensions and their lower and upper bounds can be extracted as needed:

Function Bounds(A As Variant) As Collection    Dim C As New Collection    Dim v As Variant, i As Long    On Error GoTo exit_function    i = 1    Do While True        v = Array(LBound(A, i), UBound(A, i))        C.Add v        i = i + 1    Loopexit_function:    Set Bounds = CEnd Function

Used like this:

Sub test()    Dim i As Long    Dim A(1 To 10, 1 To 5, 4 To 10) As Integer    Dim B(1 To 5) As Variant    Dim C As Variant    Dim sizes As Collection    Set sizes = Bounds(A)    Debug.Print "A has " & sizes.Count & " dimensions:"    For i = 1 To sizes.Count        Debug.Print sizes(i)(0) & " to " & sizes(i)(1)    Next i    Set sizes = Bounds(B)    Debug.Print vbCrLf & "B has " & sizes.Count & " dimensions:"    For i = 1 To sizes.Count        Debug.Print sizes(i)(0) & " to " & sizes(i)(1)    Next i    Set sizes = Bounds(C)    Debug.Print vbCrLf & "C has " & sizes.Count & " dimensions:"    For i = 1 To sizes.Count        Debug.Print sizes(i)(0) & " to " & sizes(i)(1)    Next iEnd Sub

Output:

A has 3 dimensions:1 to 101 to 54 to 10B has 1 dimensions:1 to 5C has 0 dimensions: