こんにちは!Excel VBAの世界へようこそ。
マクロの記録から一歩踏み出し、自分の手でコードを書くようになると、プログラミングの面白さがグッと広がりますよね。
でも、ここで最初の「見えない壁」にぶつかる人が少なくありません。
一生懸命書いたコードなのに、なぜか動かない。原因を探してみたら、「変数のスペルミス(タイポ)」だった――。しかも、それに気づくまでに何十分も溶かしてしまった……。
今回は、そんな悲劇をコンパイル段階(実行する前)で完全にシャットアウトする、VBAエンジニアの必須教養「Option Explicit(変数の宣言を強制する)」についてお話しします。
ここをクリアすれば、あなたのVBAライフは劇的に安定します。さあ、一緒に見ていきましょう!
—
なぜ、あなたのVBAは突然動かなくなるのか?
まずは、VBA初学者が必ずと言っていいほどハマる「魔の罠」からご覧ください。
例えば、`totalCount` という変数に集計結果を代入していくコードを書いたとします。
Sub Sample_Buggy()
‘ 最初に合計を0で初期化
totalCount = 0
‘ データを足し込んでいく処理(つもり)
totaLCount = totalCount + 10 ‘ ← おや…?文字を間違えていますよ!
MsgBox “現在の合計は:” & totalCount
End Sub
このコードを実行すると、何が起きると思いますか?
エラーメッセージは出ません。何食わぬ顔で `MsgBox` が立ち上がり、こう表示されます。
「現在の合計は:0」
……あれ? `10` を足したはずなのに、なぜ `0` なのでしょうか?
犯人は「勝手に新しい変数を作るVBAの親切心」
実はVBAは、初期状態では「宣言されていない変数が出てきたら、その場で勝手に新しい変数を作っていいよ」という、ありがた迷惑な仕様になっています。
先ほどのコードで、あなたはこう書きました。
1. `totalCount = 0` (`totalCount` という箱を用意)
2. `totaLCount = totalCount + 10` (`totaLCount` ※Lが大文字 に `10` を代入)
3. `MsgBox` では最初の `totalCount` (中身は0のまま)を表示
VBAからすれば、`totalCount` と `totaLCount` は「名前が違うから、別の箱だな」と判断します。そのため、エラーを出さずに、あなたが意図しない「空っぽの変数」を参照し続けてしまうのです。
これが、タイポ(打ち間違い)によるバグの正体です。コードが長くなればなるほど、このミスを発見するのは至難の業になります。
—
救世主:「Option Explicit」の登場
この「勝手に変数を作られる恐怖」を断ち切る魔法の呪文が、`Option Explicit`(オプション・エクスプリシット)です。日本語に訳すと「明示的な宣言をしなさい」という意味になります。
この一文をモジュールの最上部に書いておくと、VBAはこう宣言します。
> 「このモジュール内では、事前に `Dim` で宣言していない名前の変数が使われた瞬間、コードの実行を即座に拒否(コンパイルエラー)します!」
先ほどのコードに `Option Explicit` を入れてみましょう。
Option Explicit ‘ ← これをモジュールの最上部に書く!
Sub Sample_Smart()
Dim totalCount As Long
totalCount = 0
totaLCount = totalCount + 10 ‘ ← ここでタイポしている!
MsgBox “現在の合計は:” & totalCount
End Sub
この状態で実行しようとすると、実行するよりも前にVBAがピシャリとこう言います。
「コンパイル エラー: 変数が定義されていません。」(そして `totaLCount` がハイライトされます)
「おっと、スペルミスしていたな」と、その場で即座に気づくことができるのです。バグが育つ前に、卵の段階で潰す。これこそがプロのエンジニアのやり方です。
—
【重要】毎回手動で書くのは面倒?VBEの設定を「自動化」しよう
「毎回モジュールの頭に `Option Explicit` って書くの、忘れそうだな……」と思いましたか?
ご安心ください。優秀なエンジニアは、そんな面倒なことはしません。VBE(Visual Basic Editor)に最初から自動で書かせる設定にしておきます。
一生物のスキルになるので、今すぐ設定を変更しましょう。
設定の手順
1. Excelを開き、`[Alt] + [F11]` キーを押してVBE(コードを書く画面)を開きます。
2. 上部メニューの [ツール] > [オプション] をクリックします。
3. 「オプション」ダイアログが開くので、[編集] タブを選択します。
4. [変数の宣言を強制する] にチェックを入れます。
5. [OK] をクリックします。

(※イメージ図:VBEの編集タブでチェックを入れるだけ)
たったこれだけです!
この設定をしておけば、今後新しく挿入する標準モジュールには、最初から自動的に `Option Explicit` が書き込まれるようになります。
(※過去に作ったモジュールには自動追加されないので、既存のコードを開くときはご自身で1行目に追記してくださいね)
—
実務で役立つ!基本の「型宣言」とセットで覚えよう
`Option Explicit` を有効にすると、変数を使う前に必ず `Dim`(ダイム)で宣言(型を指定)することが義務付けられます。
「えっ、わざわざ型の指定までしなきゃいけないの?」
と思われるかもしれませんが、これもバグを防ぎ、マクロの動作スピードを爆上げするための大切な儀式です。
実務でよく使う基本の型を整理しておきましょう。
Option Explicit
Sub Practical_Example()
‘ 1. 整数を扱う場合(人数、回数など:-3万2768 ~ 3万2767)
Dim retryCount As Integer
‘ 2. 大きな整数を扱う場合(行番号、金額など:約-20億 ~ 20億)
Dim lastRow As Long
‘ 3. 小数点を扱う場合(単価、割合など)
Dim taxRate As Double
‘ 4. 文字列を扱う場合(担当者名、ファイルパスなど)
Dim userName As String
‘ 5. 真偽値(True / False)を扱う場合(判定フラグなど)
Dim isFinished As Boolean
‘ — 処理の例 —
lastRow = Cells(Rows.Count, “A”).End(xlUp).Row
userName = “開発 太郎”
isFinished = True
MsgBox userName & “さん、最終行は ” & lastRow & ” 行目です。”
End Sub
変数の型を明確にすることで、VBAはメモリを効率よく使うことができ、処理速度が向上します。また、「ここに文字が入るはずなのに、数字が入ってしまった」といった予期せぬ挙動も防げます。
—
まとめ:ここをクリアすれば、Excel VBAの基本はバッチリ!
今回は、VBAの土台中の土台である 「Option Explicit」 について解説しました。
- 変数のタイポによる「原因不明のバグ」に怯える日々から卒業できる。
- VBEの設定で「変数の宣言を強制する」にチェックを入れるだけで、自動化できる。
- `Dim` を使って適切な型を宣言することで、コードの安全性とパフォーマンスが跳ね上がる。
マクロの記録から脱却し、自分の頭でコードを組み立てていく上で、この設定はあなたを守る最強の盾となります。明日からの開発では、モジュールを開いたらまず `Option Explicit` があるかを確認する習慣をつけましょう。
ここをクリアしたあなたなら、もう立派なVBAプログラマーの仲間入りです。
自信を持って、次のステップへ進んでいきましょう!
