Option Base の使い方と注意点

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 を使えばインデックスの開始位置を制御できますが、使い方を誤るとバグや混乱のもとになります。
基本的には「範囲を明示的に書く」ことで、より安全で読みやすいコードが書けます。

コメント

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