Excel VBAで配列を使い始めると、必ずと言っていいほど出てくるのが
「Option Base 0」「Option Base 1」 というキーワードです。
- Option Baseって何?
- 0と1の違いは?
- そもそも書く必要があるの?
- 実務ではどちらを使うのが正解?
このあたりが曖昧なまま配列を使っていると、
インデックスのズレによるバグや
「なぜか1個足りない」「0番目でエラーになる」
といったトラブルに必ず遭遇します。
本記事では、Option Baseの基本から、VBA特有の挙動、実務での判断基準までを網羅し、
「結局どう使うのが一番安全なのか」 をはっきりさせます。
目次
- ✅ 【VBA】Option Baseとは何か?配列の「基底」を決める宣言
- ・Option Baseの基本構文
- ・指定できるのは 0 または 1 のみ
- ✅ 【VBA】Option Base 0 の意味と基本的な挙動
- ・Option Base 0 を指定した例
- ・For文でのループ例
- ・Option Base 0 が向いているケース
- ✅ 【VBA】Option Base 1 の意味と基本的な挙動
- ・Option Base 1 を指定した例
- ・For文でのループ例
- ・Option Base 1 が向いているケース
- ✅ 【VBA】Option Baseが影響するのは「省略した配列宣言」のみ
- ・下限を明示した場合は影響しない
- ・よくある勘違い
- ✅ 【VBA】Option Baseを使わない場合のデフォルト動作
- ・初心者が混乱しやすいポイント
- ✅ 【VBA】Option BaseとLBound / UBoundの関係
- ・LBound / UBoundとは
- ・Option Base 0 の場合
- ・Option Base 1 の場合
- ・実務での安全なループ例
- ✅ 【VBA】Option Baseを使うメリット
- ・メリット1:宣言がシンプルになる
- ・メリット2:1始まりを統一できる(Option Base 1)
- ・メリット3:初心者の理解負担が減る
- ✅ 【VBA】Option Baseを使うデメリット・注意点
- ・デメリット1:モジュールごとにしか効かない
- ・デメリット2:途中から読んだ人が気づきにくい
- ・デメリット3:他言語経験者とのズレ
- ✅ 【VBA】実務ではOption Baseは使うべきか?
- ・結論①:チーム開発・保守重視なら使わない
- ・結論②:初心者向け教材・個人開発ならOption Base 1はアリ
- ・結論③:どちらよりも重要なのは「統一」
- ✅ 【VBA】Option Baseが原因で起こる典型的なバグ
- ・例:1件足りないバグ
- ・例:0番目にアクセスしてエラー
- ・対策
- ✅ 【VBA】配列とExcelセルの考え方を一致させるコツ
- ✅ 【VBA】RPA(UiPath)と組み合わせる場合の注意点
- ✅ まとめ:Option Base 0と1、どちらが良いかの答え
✅ 【VBA】Option Baseとは何か?配列の「基底」を決める宣言
Option Baseとは、配列のインデックス(添字)の開始番号を指定する宣言文です。
通常、VBAの配列は 0から始まる か 1から始まる かを持ちます。
その「どちらを基準にするか」を決めるのが Option Base です。
・Option Baseの基本構文
Option Base 0
または
Option Base 1
この宣言は、モジュールの先頭にのみ記述できます。
・指定できるのは 0 または 1 のみ
- Option Base 0 → 配列は 0 から始まる
- Option Base 1 → 配列は 1 から始まる
それ以外の数値は指定できません。
✅ 【VBA】Option Base 0 の意味と基本的な挙動
まずは、Option Base 0 から見ていきます。
・Option Base 0 を指定した例
Option Base 0
Dim arr(5) As Long
この場合、arr の要素は次のようになります。
- arr(0)
- arr(1)
- arr(2)
- arr(3)
- arr(4)
- arr(5)
つまり、要素数は6個です。
・For文でのループ例
Dim i As Long
For i = 0 To 5
arr(i) = i * 10
Next i
0番目が存在するため、
「0から始まるカウント」に慣れている人には自然な形です。
・Option Base 0 が向いているケース
- 他言語(C / Java / JavaScript 等)経験者
- 配列のサイズ計算を重視する場合
- システム寄り・アルゴリズム寄りの処理
✅ 【VBA】Option Base 1 の意味と基本的な挙動
次に Option Base 1 です。
・Option Base 1 を指定した例
Option Base 1
Dim arr(5) As Long
この場合、arr の要素は次のようになります。
- arr(1)
- arr(2)
- arr(3)
- arr(4)
- arr(5)
0番目は存在しません。
・For文でのループ例
Dim i As Long
For i = 1 To 5
arr(i) = i * 10
Next i
Excelの行番号・列番号と同じ感覚で扱えるため、
初心者にとっては非常に分かりやすい というメリットがあります。
・Option Base 1 が向いているケース
- VBA初心者
- Excelの行・列と対応させたい処理
- 業務マクロ中心の開発
✅ 【VBA】Option Baseが影響するのは「省略した配列宣言」のみ
ここが 最重要ポイント です。
Option Base が影響するのは、次のような 下限を省略した配列宣言 のみです。
Dim arr(5) As Long
・下限を明示した場合は影響しない
Dim arr(1 To 5) As Long
Dim arr(0 To 5) As Long
このように 下限を明示した配列には Option Base は一切影響しません。
参考:【VBA】Dimとは?変数宣言の基本と書き方をわかりやすく解説|初心者でも実務で使える知識を解説
・よくある勘違い
❌ Option Base 1 を書けば、すべての配列が 1 始まり
⭕ 下限を省略した配列だけが影響を受ける
この誤解が、実務トラブルの原因になりがちです。
参考:【VBA】Option Explicitとは?変数未宣言エラーを防ぐ基本設定|初心者必見重要機能
✅ 【VBA】Option Baseを使わない場合のデフォルト動作
Option Base を書かない場合、VBAは Option Base 0 として動作します。
Dim arr(3) As Long
この場合:
- arr(0)
- arr(1)
- arr(2)
- arr(3)
となります。
・初心者が混乱しやすいポイント
Excelの行番号は 1 から始まるため、
arr(1)
から使えると思い込むと、
arr(0) が存在していることに気づかずバグを生みます。
参考:【VBA】配列と変数の違いを初心者向けにわかりやすく徹底解説
✅ 【VBA】Option BaseとLBound / UBoundの関係
配列を安全に扱うために欠かせないのが、
LBound と UBound です。
・LBound / UBoundとは
- LBound(配列) → 下限
- UBound(配列) → 上限
・Option Base 0 の場合
Option Base 0
Dim arr(5) As Long
Debug.Print LBound(arr) ' 0
Debug.Print UBound(arr) ' 5
・Option Base 1 の場合
Option Base 1
Dim arr(5) As Long
Debug.Print LBound(arr) ' 1
Debug.Print UBound(arr) ' 5
・実務での安全なループ例
Dim i As Long
For i = LBound(arr) To UBound(arr)
' 処理
Next i
この書き方なら、
Option Base が 0 でも 1 でも安全に動作します。
✅ 【VBA】Option Baseを使うメリット
・メリット1:宣言がシンプルになる
Dim arr(100) As Long
毎回 1 To 100 と書かなくて済みます。
・メリット2:1始まりを統一できる(Option Base 1)
Excel業務では、
「1行目」「1件目」「1番目」
といった概念が多いため、1始まりは直感的です。
・メリット3:初心者の理解負担が減る
0番目の存在を意識しなくて済むため、
学習初期の混乱を減らせます。
✅ 【VBA】Option Baseを使うデメリット・注意点
・デメリット1:モジュールごとにしか効かない
Option Base は モジュール単位 です。
他のモジュールには影響しません。
→ プロジェクト全体で統一しにくい。
・デメリット2:途中から読んだ人が気づきにくい
Option Base 1
が冒頭にあることに気づかず、
「なぜ0番目が存在しない?」と混乱することがあります。
・デメリット3:他言語経験者とのズレ
0始まりに慣れている人にとって、
Option Base 1 は違和感があります。
✅ 【VBA】実務ではOption Baseは使うべきか?
ここが最も重要な結論部分です。
・結論①:チーム開発・保守重視なら使わない
実務では、
Dim arr(1 To 10) As Long
のように、
下限・上限を明示する書き方が最も安全です。
- 読み手が迷わない
- Option Baseの有無に依存しない
- バグを生みにくい
・結論②:初心者向け教材・個人開発ならOption Base 1はアリ
学習段階や個人マクロでは、
Option Base 1
Dim arr(10) As Long
という書き方は、
理解しやすさという点で十分に価値があります。
・結論③:どちらよりも重要なのは「統一」
- Option Base 0 でも 1 でも良い
- 重要なのは プロジェクト内で混在させないこと
✅ 【VBA】Option Baseが原因で起こる典型的なバグ
・例:1件足りないバグ
Option Base 1
Dim arr(5) As Long
For i = 0 To 5
arr(i) = i ' i=0 でエラー
Next i
・例:0番目にアクセスしてエラー
Option Base 1
Debug.Print arr(0) ' 実行時エラー
・対策
- LBound / UBound を使う
- 下限を明示する
- Option Baseに依存しない書き方にする
✅ 【VBA】配列とExcelセルの考え方を一致させるコツ
Excelの行番号は 1 始まりですが、
VBA内部では 0 始まりが自然な場面もあります。
おすすめの考え方は、
- セル操作 → 1始まり(行・列)
- 配列処理 → 明示的な下限指定
という分離です。
✅ 【VBA】RPA(UiPath)と組み合わせる場合の注意点
UiPathなどのRPAとVBAを組み合わせる場合、
- 配列の基底が不明確
- モジュールごとにOption Baseが違う
といった状態は、
自動化トラブルの原因になります。
RPA連携を前提にするなら、
Dim arr(1 To n) As Variant
のような 明示的宣言がベストです。
参考:UiPathの「変数」と「データ型」徹底解説|エラー回避のコツ
✅ まとめ:Option Base 0と1、どちらが良いかの答え
- Option Baseは配列の開始番号を決める宣言
- 影響するのは「下限を省略した配列」だけ
- Option Base 0 → 0始まり
- Option Base 1 → 1始まり
- 実務では 下限を明示する書き方が最も安全
- Option Baseの使用は「理解した上で限定的に」
- 重要なのは 0 か 1 かではなく 統一と可読性
Option Baseは便利な反面、
理解せずに使うと確実にバグを生む機能です。
本記事の内容を踏まえ、
「Option Baseに頼らない配列設計」
を意識することで、
より安全で保守性の高いVBAコードが書けるようになります。