【VBA】配列の要素数を取得する

エクセルVBAで使うコードの備忘録。VBAで配列の要素数を取得するUBound関数について。UBound関数は配列以外に使用するとエラーが発生しますが、その問題を回避する方法も記載しています。

スポンサーリンク

配列の要素数を取得:UBound関数

配列の要素数を取得するにはUBound関数を使用します。配列は一次元だけではなく多次元の可能性があるため、UBound関数を使用する際は配列と、要素数を知りたい次元を指定します。ちなみに次元は省略可能です。省略された場合は、第一次元の要素数を返します。

書式

UBound([配列], [次元])

サンプルコード

下記のサンプルコードでは、すでに次元が固定された配列に対してUBound関数を使用しているので面白みはありませんが、使い方はわかると思います。実際のコードでは動的にサイズが変わる配列に対してForループを回すときなどに使います。サンプルコードでは二次元配列に対してUBound関数を使用していますかさらに多次元の配列に対してももちろん使用可能です。

'--- 要素数を取得する対象となる配列 ---'
Dim testArray(1 to 5, 1 to 10) as Variant

'--- 要素数を格納する変数 ---'
Dim m as Long
Dim n as Long

'--- 第一・第二次元の要素数を取得する ---'
m = UBound(testArray, 1) 'm = 5
n = UBound(testArray, 2) 'n = 10

ちなみに引数として与える配列が配列でなかった場合にはエラーが発生します。Variant型の変数を扱う際に、配列とならない可能性がある場合(一次元一要素)が含まれていると思わぬところでエラーが発生したりします。このような場合には、変数が配列かどうかを判定するIsArray関数を使用し、場合分けすればOKです。

配列とならない可能性がある場合

'--- 配列でないVariant型変数 ---'
Dim testArray As Variant
testArray = 1

'--- 要素数を格納数変数 ---'
Dim n As Long

'--- 配列でない場合は要素数1を設定 ---'
If (IsArray(v)) Then
    n = UBound(v)
Else
    n = 1
End If