Excel VBA | 配列の「範囲外アクセス」

VBA
スポンサーリンク

では、Excel VBAで配列の「範囲外アクセス」について、プログラミング初心者向けに超かみ砕いて、例題付きで解説します。


1. 配列とは?

配列は「同じ種類のデータをまとめて保存する箱の集まり」です。

  • 例:都道府県の名前を3つ保存したい場合
Dim pref(2) As String
VB

ここで (2) は「0から2までの3つの箱を作るよ」という意味です。

  • pref(0) → 最初の箱
  • pref(1) → 2番目の箱
  • pref(2) → 3番目の箱

※ VBA では、特に指定しない場合は 0 から始まることに注意です。


2. 範囲外アクセスとは?

配列の「箱」の範囲を超えてデータを入れようとすると、実行時エラーが発生します。

  • 例:
pref(3) = "埼玉県"   ' これはエラー!箱は0~2までしかない
VB

💡 ポイント:VBA は「書く時は構文上問題ないけど、実行してみると範囲外でエラー」となる場合があります。


3. 配列の範囲を確認する方法

VBA には LBoundUBound という関数があります。

MsgBox "配列の最初の番号は " & LBound(pref)
MsgBox "配列の最後の番号は " & UBound(pref)
VB
  • LBound(pref) → 最初のインデックス(0)
  • UBound(pref) → 最後のインデックス(2)

これで「どこまで使えるか」が分かります。


4. 例題

例題 1:正しい範囲内で代入する

Dim pref(2) As String

pref(0) = "東京"
pref(1) = "大阪"
pref(2) = "京都"

MsgBox pref(1)   ' 出力: 大阪
VB

✅ 正常に動きます。


例題 2:範囲外アクセスをしてみる

Dim pref(2) As String

pref(0) = "東京"
pref(1) = "大阪"
pref(2) = "京都"

pref(3) = "埼玉"   ' 実行時エラー!
VB
  • 実行すると「インデックスが無効です」とエラーが出ます。

例題 3:配列の上限を自動で取得してループ処理

Dim pref(2) As String
Dim i As Integer

pref(0) = "東京"
pref(1) = "大阪"
pref(2) = "京都"

For i = LBound(pref) To UBound(pref)
    MsgBox pref(i)
Next i
VB
  • LBound(pref) → 0
  • UBound(pref) → 2
  • これで「範囲を意識せずに配列の全要素を処理」できます。

5. 初心者向けまとめ

  1. 配列は「箱の集まり」で、番号(インデックス)が決まっている
  2. 範囲外の番号を使うとエラーになる
  3. LBoundUBound を使うと安全に全要素を処理できる
  4. 宣言した配列の範囲を必ず確認する習慣をつける
タイトルとURLをコピーしました