【入門編】「Option Explicit」を強制する:VBE設定でタイポによるバグを未然に防ぐ – Excel VBA解析バイブル

スポンサーリンク

こんにちは!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オプション設定のイメージ](https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&w=800&q=80)
(※イメージ図: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プログラマーの仲間入りです。
自信を持って、次のステップへ進んでいきましょう!

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