【VBAマクロ】UBound関数の使い方|配列の最終要素を簡単に取得!

スポンサードリンク
VBA
  • UBound(LBound)の書き方・使い方が知りたい
  • 配列の最終要素の番号が知りたい
  • 配列の要素数を取得したい

このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。

  • UBound(LBound)の書き方・使い方を学べる
  • 配列の最終要素番号を知る方法がわかる
  • UBoundを使った実践での活用例を知れる

-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
エクセル使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

VBA(Excelマクロ)におけるUBoundとは?

「UBound(Upper Bound)」は、配列の中で最後のインデックス番号(上限)を取得する関数です。

説明画像

上図の場合は、配列の最後尾である「4」が返されます。
配列の要素数が知りたい場合は、「UBound」に「1」を足せばいいことになります。
(4+1=5)

では、「UBound」の書き方や使い方を見ていきましょう。

【LBound(Lower Bound)との違い】

同類の関数に「LBound(Lower Bound)」があります。
「LBound」は配列の最初のインデックス番号(下限)を返します。
(「0~4」の要素がある配列なら0を返す)
LBound(下限)とUBound(上限)をループ処理の中で使う場合があります。

スポンサードリンク

UBoundの使い方

まずは簡単な使い方を見ていきましょう。

簡単な使い方

下記VBAコードは「UBound」を使った簡単な例です。

Sub 簡単な使い方()
    Dim arr(4) As String
    arr(0) = "鮪"
    arr(1) = "鮭"
    arr(2) = "鰆"
    arr(3) = "鰤"
    arr(4) = "鯖"

    Debug.Print "配列の上限は " & UBound(arr)
End Sub

1つ1つ解説いたします。

プロシージャの作成

Sub 簡単な使い方()

End Sub

プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。

変数(配列)の宣言・作成

    Dim arr(0 To 4) As String
    arr(0) = "鮪"
    arr(1) = "鮭"
    arr(2) = "鰆"
    arr(3) = "鰤"
    arr(4) = "鯖"

上記コードにて、変数(配列)の宣言と配列の作成を行っております。
変数や配列についての詳しい解説は、下記記事をご参考ください。

配列の上限を取得

    Debug.Print "配列の上限は " & UBound(arr)

上記コードにて、配列の上限を「UBound」で取得し、「Debug.Print」で表示しています。

「UBound」の後ろに()を書き、()内に配列が入った変数を書いたら完了です。
これで配列の上限(4)がイミディエイトウィンドウに表示されます。

実行結果

マクロが完成したら、実行して動作を確認してみましょう。

エクセル内に作成した自作のボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。

ショートカットキーを押すことでマクロを実行させることもできます。
詳しくは下記記事をご参考ください。

UBound(今回は4)は、Long型で返されます。
Long型は大きい桁(約20億まで)の整数を扱うことができます(Integerは約3万)
配列の要素数が極端に多くても心配いりません。

少し高度な使い方

ここからは、少し高度な使い方を見ていきましょう。

多次元配列とUBound

UBoundは、多次元配列でも使うことができます
その場合は、どの次元の上限を取得したいかを指定します。

Sub 二次元配列とUBound
    Dim arr(1, 3) As String

    arr(0,0) = "A1"
    arr(0,1) = "B1"
    arr(0,2) = "C1"
    arr(0,3) = "D1"

    arr(1,0) = "A2"
    arr(1,1) = "B2"
    arr(1,2) = "C2"
    arr(1,3) = "D2"

    Debug.Print UBound(arr, 1)  ' → 1次元目(行)の上限 → 1
    Debug.Print UBound(arr, 2)  ' → 2次元目(列)の上限 → 3
End Sub

動的配列とUBound

文字列を分割して配列にする場合にも、UBoundは便利です。

Sub 動的配列とUBound()
    Dim txt As String
    Dim arr() As String

    txt = "ホップ,ステップ,ジャンプ"
    arr = Split(txt, ",")

    For i = LBound(arr) To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub
動的配列とUBound1

「Split」は文字列を分割する関数です。詳細は下記記事をご参考ください。

分割した文字列をFor文の繰り返し処理で順番に表示させています。
For文については下記記事でわかりやすく解説しております。ご参考ください。

動的配列のため、txtが「ホップ,ステップ,ジャンプ,アタック」に変わっても対応できます。

動的配列とUBound2

実践での活用例

「UBound」を使うことで、配列をセルに書き込むことができます。

Sub 配列をセルに書き込み()
    Dim arr(2) As String

    arr(0) = "ホップ"
    arr(1) = "ステップ"
    arr(2) = "ジャンプ"

    For i = LBound(arr) To UBound(arr)
        cells(1,i+1).Value = arr(i)
    Next i

End Sub
セルへの書き込み例
スポンサードリンク

うまく動作しないときの対処法

エラーが発生する

インデックスが有効にありません

インデックスが有効にありません

空っぽの配列に「UBound」を使うと、「インデックスが有効範囲にありません」というエラーが出ます。

Sub 空っぽ配列とUBound()
    Dim arr() As String

    Debug.Print UBound(arr) ' 配列はカラなのでエラーが出る
End Sub

コードを確認し、要素を追加しましょう。

Sub 改善策()
    Dim arr(3) As String

    Debug.Print UBound(arr)
End Sub

コンパイルエラー・実行時エラー

コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。

警告表示

マクロが無効になっている表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。

スポンサードリンク

最後に

VBAのUBound関数について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました