では、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 には LBound と UBound という関数があります。
MsgBox "配列の最初の番号は " & LBound(pref)
MsgBox "配列の最後の番号は " & UBound(pref)
VBLBound(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
VBLBound(pref)→ 0UBound(pref)→ 2- これで「範囲を意識せずに配列の全要素を処理」できます。
5. 初心者向けまとめ
- 配列は「箱の集まり」で、番号(インデックス)が決まっている
- 範囲外の番号を使うとエラーになる
LBoundとUBoundを使うと安全に全要素を処理できる- 宣言した配列の範囲を必ず確認する習慣をつける
