【VBA入門】UBound、LBound関数で配列の要素数を取得

UBound関数LBound関数って使ってますか?配列の要素数を調べるときに使うと便利な関数です。この記事では、UBound関数、LBound関数について

  • UBound関数、LBound関数とは
  • UBound関数の使い方
  • LBound関数の使い方

といった基本的な内容から、Ubound、LBound関数で配列要素を列挙する方法など具体的な使い方についても解説していきます。今回はUBound関数、LBound関数について、使い方をわかりやすく解説します。

UBound関数、LBound関数とは

UBound関数は引数に指定した配列で使用できる最も大きいインデックス番号を返します。LBound関数は引数に指定した配列で使用できる最も小さいインデックス番号を返します。配列の要素数を調べるためにLBound関数とUBound関数はよく使われています。

要素数は下記の式で求めることができます。

要素数 = UBound関数の戻り値 - LBound関数の戻り値 + 1

それではこれらの関数の使い方について配列の宣言と一緒にみていきましょう!

UBound関数の使い方

UBound関数は引数に指定した配列が1次元配列の場合と、2次元以上の多次元配列の場合で引数の指定が変わってきます。

UBound(arrayname [ ,dimension ] )
[ ]内は省略可能です。引数arraynameでは配列名を指定します。引数dimensionでは次元を指定します。

1次元配列の場合

1次元配列の場合は、引数に対象となる配列名のみを指定します。サンプルコードで確認しましょう。

Sub macro1()
    '配列の宣言
    Dim arr1(3) As Integer
    Dim arr2(5) As Integer
    Dim arr3(11) As Integer
    
    'UBound関数の戻り値の表示
    Dim str As String
    str = UBound(arr1) & vbCrLf & UBound(arr2) & vbCrLf & UBound(arr3)
    MsgBox str, vbInformation
End Sub

1d_ubound

画像:実行結果

このサンプルコードでは配列のインデックス番号の上限値がそれぞれ3、5、11の配列を宣言しています。UBound関数の引数にそれぞれの配列名を指定し、戻り値を表示しています。

宣言時に指定した配列のインデックス番号の上限値とUBound関数の戻り値が一致しているのがわかります。

多次元配列の場合

多次元配列の場合は、第1引数に対象となる配列名を、第2引数に調べる配列の次元を指定します。それではサンプルコードで確認しましょう。

Sub macro2()
    '配列の宣言
    Dim arr(3, 5, 11) As Integer
    
    'UBound関数の戻り値の表示
    Dim str As String
    str = UBound(arr, 1) & vbCrLf & UBound(arr, 2) & vbCrLf & UBound(arr, 3)
    MsgBox str, vbInformation
End Sub

1d_ubound

画像:実行結果

このサンプルコードでは各次元のインデックス番号の上限値がそれぞれ3、5、11の3次元配列を宣言しています。UBound関数の第2引数にそれぞれの次元を指定し、戻り値を表示しています。

宣言時に指定した各次元のインデックス番号の上限値とUBound関数の戻り値が一致しているのがわかります。

LBound関数の使い方

LBound関数も引数に指定した配列が1次元配列の場合と、2次元以上の多次元配列の場合で引数の指定が変わってきます。引数の指定の仕方はUBound関数と同じです。

LBound(arrayname [ ,dimension ] )

1次元配列の場合

1次元配列の場合は、引数に対象となる配列名のみを指定します。サンプルコードで確認しましょう。

Sub macro3()
    '配列の宣言
    Dim arr1(1 To 3) As Integer
    Dim arr2(3 To 5) As Integer
    Dim arr3(5 To 11) As Integer
    
    'LBound関数の戻り値の表示
    Dim str As String
    str = LBound(arr1) & vbCrLf & LBound(arr2) & vbCrLf & LBound(arr3)
    MsgBox str, vbInformation
End Sub

1d_lbound

画像:実行結果

このサンプルコードでは配列のインデックス番号の下限値がそれぞれ1、3、5の配列を宣言しています。LBound関数の引数にそれぞれの配列名を指定し、戻り値を表示しています。

宣言時に指定した配列のインデックス番号の下限値とLBound関数の戻り値が一致しているのがわかります。

多次元配列の場合

多次元配列の場合は、第1引数に対象となる配列名を、第2引数に調べる配列の次元を指定します。それではサンプルコードで確認しましょう。

Sub macro4()
    '配列の宣言
    Dim arr(1 To 3, 3 To 5, 5 To 11) As Integer
    
    'LBound関数の戻り値の表示
    Dim str As String
    str = LBound(arr, 1) & vbCrLf & LBound(arr, 2) & vbCrLf & LBound(arr, 3)
    MsgBox str, vbInformation
End Sub

1d_lbound

画像:実行結果

このサンプルコードでは各次元のインデックス番号の下限値がそれぞれ1、3、5の3次元配列を宣言しています。LBound関数の第2引数にそれぞれの次元を指定し、戻り値を表示しています。

宣言時に指定した各次元のインデックス番号の下限値とLBound関数の戻り値が一致しているのがわかります。

UBound、LBound関数で配列の要素数を取得

UBound、LBound関数の使い方をお伝えしましたので、実際に配列の要素数を取得してみましょう。文字列を区切り文字で分割し配列に格納するSplit関数を例にして、格納した要素数を求めてみます。

要素数は前述のとおり下記の式で求めることができます。

要素数 = UBound関数の戻り値 - LBound関数の戻り値 + 1
Sub macro7()
    Dim arr() As String
    
    arr = Split("侍,エンジニア,塾", ",")
    
    MsgBox "要素数: " & UBound(arr) - LBound(arr) + 1
End Sub

UBound01

画像:実行結果

Split関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

UBound、LBound関数で配列要素を列挙する

UBound関数、LBound関数は配列の要素をひとつずつ参照する場合にFor文とあわせてよく使われます。

1次元配列の場合

1次元配列の場合のサンプルコードを確認しましょう。

Sub macro5()
    '配列の宣言
    Dim arr(1 To 3) As Integer
        
    '配列の各要素の初期化と表示
    Dim str As String, i As Integer
    For i = LBound(arr) To UBound(arr)
        arr(i) = i
        str = str & arr(i) & ", "
    Next i
    
    MsgBox str, vbInformation
End Sub

1d_For

画像:実行結果

多次元配列の場合

3次元配列の場合のサンプルコードを確認しましょう。

Sub macro6()
    '配列の宣言
    Dim arr(1 To 3, 3 To 5, 5 To 11) As Integer
    
    '配列の各要素の初期化と表示
    Dim str As String, i As Integer, j As Integer, k As Integer
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            For k = LBound(arr, 3) To UBound(arr, 3)
                arr(i, j, k) = i * 100 + j * 10 + k
                str = str & arr(i, j, k) & ", "
            Next k
            str = str & vbCrLf
        Next j
        str = str & vbCrLf
    Next i
    
    MsgBox str, vbInformation
End Sub

3d_For

画像:実行結果

まとめ

ここではUBound関数、LBound関数について説明しました。配列の要素数を調べたり、For文とあわせて要素にひとつずつアクセスする場合に使うと便利です。使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説