こんにちは!Excel VBAの世界へようこそ。
これまで「マクロの記録」を使って、ボタン一つで作業が自動化される魔法のような体験をしてきたことでしょう。
「よし、次は自分でコードを書いてみよう!」
そう思ってVBE(Visual Basic Editor)を開いたあなたへ。まず最初に、これだけは絶対に覚えておいてほしい「エンジニアの絶対的掟」があります。
それが、今回お話しする`Option Explicit`(明示的変数宣言の強制)です。
「なんだか難しそうな英語が出てきたな……」と身構えなくて大丈夫ですよ。ここをクリアすれば、あなたの書くコードは見違えるほど洗練され、謎のエラーに悩まされる時間が劇的に減ります。さあ、一緒にVBAの本質へと足を踏み入れましょう!
—
1. なぜ「Option Explicit」が必須なのか?(恐怖のタイポ事件)
まずは、次のコードを見てください。一見すると、何も問題なさそうに見えますよね。
Sub TotalCalculator()
‘ 合計金額を計算するつもり……
goukei = 100
goukei = goukei + 50
MsgBox “合計は ” & gokei & ” 円です”
End Sub
さあ、このマクロを実行すると、メッセージボックスには何と表示されると思いますか?
正解は……「合計は 0 円です」です。
「えっ!? 100+50で150になるはずじゃん!壊れた!?」とパニックになるかもしれません。
でも、Excelは壊れていません。犯人は「うっかりミス(タイポ)」です。
- 計算に使っていたのは `goukei`
- 表示しようとしたのは `gokei` (`u`が抜けている!)
VBAはデフォルト(初期状態)では、「おっ、新しい名前が出てきたぞ。じゃあ勝手に新しい箱を用意しておこう」と気を利かせる仕様になっています。そのため、`gokei`という「中身がからっぽの新しい箱」の値を表示してしまい、結果が「0」になってしまったのです。
「Option Explicit」という名の最強のガードマン
もし、モジュールの一番上にたった一行、`Option Explicit` と書いておいたらどうなるでしょうか?
Option Explicit ‘ ← これをモジュールの最上部に書く!
Sub TotalCalculator()
goukei = 100
goukei = goukei + 50
MsgBox “合計は ” & gokei & ” 円です”
End Sub
この状態で実行しようとすると、VBAは実行する前にピタッと止まり、こう怒ってくれます。
> 「変数が見つかりません。」(Compile error: Variable not defined)
そして、タイポした `gokei` の部分を青くハイライトして教えてくれるのです。
これが、`Option Explicit` が「必須」とされる最大の理由です。エラーを「実行後(最悪の場合、気づかずに誤ったデータを保存した後)」ではなく、「実行する前のコンパイル段階」で100%防いでくれる、最強のガードマンなのです。
—
2. メモリの裏側:なぜ「Variant型」を避けるべきなのか?
変数宣言を強制するようになると、次に意識すべき重要概念が見えてきます。それが「データ型(Type)」です。
型を明示しない(あるいは `Dim x` のように省略した)場合、VBAは自動的にその変数を `Variant`(バリアント)型 という特別な箱として扱います。
「なんだ、自動でやってくれるならラクじゃん!」と思いましたか?
ここに、VBAのパフォーマンスを落とす最大の罠が潜んでいます。
Variant型は「何でも入るデカいリュック」
- 通常の型(Long, Stringなど):
お弁当箱にはお弁当、ペンケースにはペンを入れるように、サイズと用途がきっちり決まっています。メモリの無駄がありません。
- Variant型:
文字も、整数も、小数も、果てはExcelのワークシートオブジェクトまで何でも放り込める「超巨大な万能リュック」です。
何でも入る代わりに、Variant型はメモリを非常に多く消費し、処理速度も遅くなります。なぜなら、VBAが「今、この中に入っているのは数字だっけ?文字だっけ?」と実行の都度、中身を確認するオーバーヘッド(余計な計算)が発生するからです。
数行のコードなら体感できませんが、何万行ものセルのデータをループ処理する実務レベルのマクロでは、この小さな「甘え」が原因で、処理が何倍も遅くなり、最悪の場合は「メモリ不足」でExcelが強制終了します。
—
3. 実践:プロが書く美しい変数宣言のルール
では、実際に現場で通用する正しい変数宣言の書き方を見てみましょう。
データの内容に合わせて、適切な「型」を指定する習慣をつけていきます。
Option Explicit ‘ 忘れないで!
Sub ProcessData()
‘ 【数値(整数)を扱う場合】 → Long型(IntegerよりLongが現代のPCでは高速です)
Dim rowIndex As Long
Dim maxCount As Long
‘ 【文字列を扱う場合】 → String型
Dim userName As String
‘ 【判定(True/False)を扱う場合】 → Boolean型
Dim isFinished As Boolean
‘ — 実際の処理 —
maxCount = 1000
userName = “エンジニアA”
isFinished = False
For rowIndex = 1 to maxCount
‘ 何らかの高速処理…
Next rowIndex
MsgBox userName & “さんの処理が完了しました。”, vbInformation
End Sub
💡 現場の知恵:VBEの設定で「自動追加」にしよう!
毎回 `Option Explicit` と手入力するのは面倒ですよね。
VBEのメニューにある [ツール] > [オプション] から、[編集]タブにある [変数の宣言を強制する] にチェックを入れてみてください。
これを行っておくだけで、今後新しく標準モジュールを追加した際、最初から自動で `Option Explicit` が書き込まれるようになります。今日から絶対に設定しておきましょう!
—
まとめ:ここをクリアすれば、もう初心者ではない!
今回は、VBAを掌握するための第一歩として、以下の極意をお伝えしました。
1. `Option Explicit` はタイポによる致命的なバグを未然に防ぐ防壁である。
2. Variant型は「何でも入るが重いリュック」。用途に応じた型(Long, Stringなど)を明示せよ。
3. VBEの設定であらかじめ自動挿入を有効化し、スマートに開発せよ。
「動けばいいや」で書いたコードは、半年後のあなたを苦しめる負債になります。しかし、型を意識し、意図を持って書かれたコードは、美しく、速く、そして何よりあなたを裏切りません。
ここをクリアしたあなたは、もう「マクロの記録に頼る初心者」ではありません。自信を持って、次のステップへ進んでくださいね!
