UBound

Returns a Long containing the largest available subscript for the indicated dimension of an array.

Syntax: UBound( arrayname [ , dimension ] )

arrayname
required The name of the array variable; follows standard variable naming conventions.
dimension
optional A Long indicating which dimension’s upper bound is returned. Use 1 for the first dimension, 2 for the second, and so on. If dimension is omitted, 1 is assumed.

UBound is used together with LBound to determine the size of an array.

Important

On a dynamic array that has never been sized — one declared Dim a() As Long and not yet ReDim‘d, or one Erase has released — this raises an error (see Common Errors) rather than returning anything. Test with IsArrayInitialized first. A ParamArray is always initialized, so it needs no guard: with no arguments passed it reports bounds of 0 and -1.

For an array Dim A(1 To 100, 0 To 3, -3 To 4), UBound returns:

Statement Return value
UBound(A, 1) 100
UBound(A, 2) 3
UBound(A, 3) 4

Common Errors

Error When
9 (&H9), Subscript out of range arrayname is a dynamic array that has not been sized with ReDim, or that Erase has released
-2147467259 (&H80004005), Unspecified error dimension is less than 1 or greater than the number of dimensions of arrayname, after rounding
dimension is greater than 32,767
13 (&HD), Type mismatch arrayname is a Variant that holds no array, Empty and Null included
94 (&H5E), Invalid use of Null dimension is Null

Note BETA 1034

When dimension is less than 1 or greater than the number of dimensions of arrayname, after rounding, VB6 and 64-bit VBA raise error 9 (&H9), Subscript out of range, instead.

Note BETA 1034

When dimension is greater than 32,767, VB6 and 64-bit VBA raise error 6 (&H6), Overflow, instead.

Example

This example uses UBound to return the largest available subscript for the indicated dimension of an array.

Dim Upper As Long
Dim MyArray(1 To 10, 5 To 15, 10 To 20)    ' Multidimensional array.
Dim AnyArray(10)
Upper = UBound(MyArray, 1)                 ' Returns 10.
Upper = UBound(MyArray, 3)                 ' Returns 20.
Upper = UBound(AnyArray)                   ' Returns 10.

See Also