VBAで配列を使うとき、インデックス(添字)の開始番号が 0 なのか 1 なのかで、思わぬミスが起きることがあります。
この「配列の開始番号」を制御するのが Option Base
という命令です。
目次
1. Option Base とは
Option Base
は、配列のインデックスの初期値(開始番号)を指定するための設定です。
- デフォルトでは 0から 始まります。
Option Base 1
を指定すると、1から始まります。
2. 書き方と使い方
書き方
Option Base 1
- モジュールの一番上に書く必要があります(Subより上)。
Option Base 1
を書くと、すべての「明示的に範囲を指定しない配列」は 1 から始まるようになります。
使用例
Option Base 1
Sub Sample()
Dim scores(5) As Integer 'インデックスは 1~5 になる
scores(1) = 100
MsgBox scores(1) '100 が表示される
End Sub
3. 指定しない場合の挙動(デフォルト)
Option Base
を書かない場合、VBAでは 自動的に Option Base 0 となり、配列は 0 から始まります。
Sub Sample()
Dim scores(5) As Integer 'インデックスは 0~5(6個)になる
MsgBox scores(0) 'エラーにならない
End Sub
4. 明示的に範囲を指定した場合
Option Base
は、「開始番号を指定しない場合のみ」に適用されます。
Option Base 1
'以下のように範囲を指定した場合は Option Base の影響なし
Dim scores(3 To 7) As Integer
5. 注意点
複数のモジュールで混在すると混乱しやすい
Option Base
はモジュール単位で有効なので、書いてあるモジュールと書いていないモジュールで挙動が変わります。
同じように配列を使っているつもりでも、インデックスエラーが出る原因になります。
曖昧なコードになる可能性がある
以下のような宣言は Option Base
の設定によって動きが変わるため、コードを読む人にとって分かりづらくなる可能性があります。
Dim scores(5) As Integer '0~5? 1~5?(Option Baseによる)
明示的な範囲指定がおすすめ
安全・明確に書くためには、次のように 開始と終了を指定するのがベストです。
Dim scores(1 To 5) As Integer
6. まとめ
項目 | 内容 |
---|---|
Option Base とは | 配列のインデックスの開始番号を指定する命令 |
設定できる値 | Option Base 0 または Option Base 1 |
効果がある範囲 | インデックスの範囲を明示しない配列のみ |
書く位置 | モジュールの先頭(Sub よりも前) |
おすすめの書き方 | Dim arr(1 To 5) のように範囲を明示することで混乱を防げる |
Option Base
を使えばインデックスの開始位置を制御できますが、使い方を誤るとバグや混乱のもとになります。
基本的には「範囲を明示的に書く」ことで、より安全で読みやすいコードが書けます。
コメント