こんにちは!Excelマクロの記録から一歩踏み出し、「自分でコードを書けるようになりたい!」と熱意を燃やしているあなたへ。
今回は、VBAエンジニアとして生きる私たちが、プロジェクトの最初に絶対に、例外なく、何が何でも行うべき「聖域の初期設定」についてお話しします。
ここをクリアするだけで、あなたのVBAライフから「原因不明のバグに何時間も悩まされる悪夢」が嘘のように消え去ります。さあ、堅牢で美しいコードを書くための第一歩を踏み出しましょう!
—
1. なぜ「マクロの記録」のままでは限界が来るのか?
Excelの「マクロの記録」は素晴らしい機能です。操作を記録するだけでコードを生成してくれますからね。しかし、そこから自分でコードを書き始めようとしたとき、多くの人が次のような壁にぶつかります。
- 「昨日まで動いていたのに、今日は『変数が定義されていません』というエラーが出る」
- 「動くには動くが、セルの値がなぜか `Empty`(空っぽ)になって計算が狂う」
- 「コードのどこかで変数名を打ち間違えた(タイポした)せいで、意図しない場所にデータを書き込んでしまった」
これらのトラブルの9割は、あるたった一つの設定を怠っていることが原因です。それが今回テーマにする `Option Explicit`(明示的な変数宣言の強制) です。
—
2. タイポ地獄の恐怖:放置されたVBAは「野良犬」と同じ
まずは、この恐ろしいコードを見てください。`Option Explicit` が設定されていない状態の悲劇です。
Sub CalclateTax()
‘ 消費税を計算して合計を出すマクロのつもり…
Dim totalPrise As Long ‘ ← ここで “totalPrise”(e)と宣言している
totalPrice = 10000 ‘ ← あれ? ここでは “totalPrice”(i)と打ってしまった!
‘ 税率10%をかけて出力
MsgBox totalPrice 1.1
End Sub
さて、このマクロを実行するとどうなるでしょうか?
コンパイルエラー(実行前の文法チェック)は起きません。VBAは涼しい顔をして実行されます。
しかし、結果は… 「0」または「予期せぬ空の値」 が返されます。
【何が起きたのか?】
VBAは「`totalPrice` なんて変数は宣言されていないけれど、新しく勝手にメモリを確保してあげよう。初期値はもちろん空っぽ(0)だね!」と、あなたのタイポ(打ち間違い)を親切心から「新しい変数」として勝手に解釈してしまったのです。
正しく宣言した `totalPrise` には `10000` が入っているのに、計算に使ったのは勝手に作られた空っぽの `totalPrice`。コードが長大になったとき、この手のバグを見つけるのは、干し草の針を探すような苦行になります。
これが、タイポによるバグの正体です。
—
3. 救世主 `Option Explicit` とは何か?
ここで登場するのが `Option Explicit` です。日本語に訳すなら、「変数は必ず最初に宣言しなさい!さもないと絶対にコードを実行させません!」という、VBAに対する厳格な「誓約」です。
この一文をモジュールの最上部に書いておくと、先ほどのコードはこうなります。
Option Explicit ‘ ← このモジュールでは変数宣言をごまかさない!
Sub CalclateTax()
Dim totalPrise As Long
totalPrice = 10000 ‘ ← コンパイルエラー!「変数が定義されていません」とVBEが即座に怒ってくれる!
MsgBox totalPrice 1.1
End Sub
実行する前に、VBE(VBAエディタ)が赤字やダイアログで「おいおい、`totalPrice` なんて変数、宣言されてないぞ!」と教えてくれます。つまり、実行する前にバグが消滅するのです。
この「コンパイル時にエラーを検知できる」というサイクルこそが、プログラミングを安定させる最大の秘訣です。
—
4. 【実戦】VBEの設定で「自動的」にこれを義務化する
「毎回 `Option Explicit` って手動で書くの面倒くさいな…」と思いましたか?
ご安心ください。世界中のプログラミングを愛する先人たちが、そんなズボラ(効率化)を許すはずがありません。
VBEの設定を一度変更するだけで、今後新しく作るすべての標準モジュールに、自動で `Option Explicit` が最上部に挿入されるようになります。
設定の手順(3分で終わります)
1. Excelを開き、`[Alt] + [F11]` キーを押して VBE(Visual Basic Editor) を起動します。
2. メニューバーの [ツール (Tools)] > [オプション (Options)] をクリックします。
3. 開いたダイアログボックスの [編集 (Editor)] タブを開きます。
4. 「変数の宣言を強制する (Require Variable Declaration)」 というチェックボックスにチェックを入れます。
5. [OK] をクリックして閉じます。
—
これだけです!
これ以降、新しく挿入した標準モジュールの頭には、必ず最初から `Option Explicit` が鎮座するようになります。過去に作ったモジュールには適用されないので、既存のコードを触る際はお手動で追加してくださいね。
—
5. 現場のプロからのアドバイス:変数の型を制する者はVBAを制する
`Option Explicit` を有効にすると、変数を `Dim` で宣言することが義務付けられます。ここで意識してほしいのが「データ型(Type)」の指定です。
‘ 良い例:型を明確に指定している
Dim 顧客ID As Long
Dim 登録日時 As Date
Dim 氏名 As String
Dim 判定フラグ As Boolean
何も指定せずに `Dim x` と書くと、VBAはすべてを万能型である `Variant`(バリアント型)として扱います。これは何でも入る便利な箱ですが、メモリを大量に消費し、動作が重くなり、予期せぬ型変換バグの温床になります。
- 整数なら `Long`
- 小数・金額なら `Currency` または `Double`
- 文字列なら `String`
- 日付なら `Date`
- True/False なら `Boolean`
型を制覇することは、バグを生まないコードを書くための王道です。
—
まとめ:ここをクリアすれば、Excel VBAの基本はバッチリですよ!
いかがでしたでしょうか?
今回は、VBA開発において最も重要と言っても過言ではない `Option Explicit` の設定と、その恩恵について解説しました。
- 「マクロの記録」の先へ進むなら、変数の宣言は必須。
- `Option Explicit` を使えば、タイポによる恐怖のバグを事前にシャットアウトできる。
- VBEのオプションで「変数の宣言を強制する」にチェックを入れ、自動化せよ。
この設定を済ませたあなたのVBEは、もう素人のおもちゃではありません。プロフェッショナルな開発環境そのものです。
ここをクリアしたあなたなら、明日からのVBAコーディングが劇的に安全で、楽しいものに変わるはずです。自信を持って、次のステップへ進んでくださいね!
