Excel VBA | 超初心者(Excel操作+マクロ体験):VBA基礎環境 – Option Explicit

Excel VBA VBA
スポンサーリンク

Option Explicit は「うっかりミス防止スイッチ」

まず一言でいうと、
Option Explicit は「変数を必ず宣言しなさい」というルールをオンにするスイッチです。

VBAは、本来「宣言していない変数」でも、いきなり使えてしまいます。
ところがそれは、超初心者にとってはかなり危険です。
スペルミスしてもエラーにならず、「なんか結果がおかしい…」という“気づきにくいバグ”を生みます。

Option Explicit を書いておくと、
「宣言してない変数を使ったら、その場でエラーにしてくれる」
つまり、うっかりミスを早い段階で教えてくれる安全装置になります。

変数宣言なしだと何が危ないのか(悪い例から見る)

Option Explicit なしの世界

まずは、Option Explicit を書いていない状態のコードを見てみます。

Sub ShowLength()

    length = 10
    MsgBox lenght   ' ← スペルミス(lenght)

End Sub
VB

本当は length と書きたかったのに、lenght と打ち間違えています。
でも、Option Explicit がないと、VBAはこう解釈します。

「length という変数があるらしい。
lenght という別の変数もあるらしい。
どちらも宣言されていないけど、まあ Variant って型で勝手に作っておこう。」

結果どうなるかというと、
length には 10 が入るけれど、lenght は何も代入されていない「空っぽの変数」です。
MsgBox lenght はエラーにならず、空白や 0 のような“それっぽいけど間違った結果”を出します。

ここが怖いポイントです。
エラーにならないので、「気づきにくいバグ」になるのです。

Option Explicit ありの世界

同じコードに、Option Explicit を付けてみます。

Option Explicit

Sub ShowLength()

    length = 10
    MsgBox lenght   ' ← スペルミス(lenght)

End Sub
VB

この状態で実行すると、
「コンパイルエラー:変数が定義されていません」
というエラーが出て、lenght のところが青くハイライトされます。

つまり VBA がこう言ってくれます。
「その変数、宣言されてないよ。スペル間違えてない?」と。

これが Option Explicit の一番大事な役割です。
“バグになりそうなミス”を、実行前に止めてくれる。
超初心者ほど、この助けはめちゃくちゃ大きいです。

Option Explicit の正体と書く場所

どこに書くのか

Option Explicit は、モジュールの一番上に書きます。

Option Explicit

Sub Sample()

    ' ここにコードを書く

End Sub
VB

ポイントは、「どのプロシージャよりも上に書く」ということです。
Sub の中ではなく、モジュールの先頭行に置きます。

この一行があるモジュールでは、
「すべての変数を、Dim などで宣言してからでないと使えない」
というルールが有効になります。

どういうルールが強制されるのか

Option Explicit があると、
そのモジュール内で使う変数は、必ず事前に宣言しなければなりません。

たとえば、こう書く必要があります。

Option Explicit

Sub Test()

    Dim x As Long
    x = 10
    MsgBox x

End Sub
VB

もし Dim x As Long を書かずに x を使おうとすると、
「変数が定義されていません」というコンパイルエラーになります。

ここで大事なのは、
「エラーが出るのは悪いことではなく、“守ってくれている”ということです。
エラーが出るからこそ、「あ、宣言忘れてた」「スペル間違えた」と気づけます。

Option Explicit がある世界の書き方(例題で体感)

例題1:正しい変数宣言と代入

まずは、Option Explicit を使った“正しい書き方”の基本形です。

Option Explicit

Sub CalcTotal()

    Dim price As Long
    Dim quantity As Long
    Dim total As Long

    price = 120
    quantity = 3
    total = price * quantity

    MsgBox total

End Sub
VB

このコードでは、price、quantity、total をすべて Dim で宣言しています。
Option Explicit があるので、宣言を忘れるとコンパイルエラーになります。

この状態だと、
「変数は必ず Dim する」
「名前を間違えたらその場で怒られる」
という、“安全な環境”の中で練習できるようになります。

例題2:スペルミスを Option Explicit が守ってくれる

今度は、わざとミスを入れてみます。

Option Explicit

Sub CalcTotal()

    Dim price As Long
    Dim quantity As Long
    Dim total As Long

    price = 120
    quantity = 3
    total = pirce * quantity   ' ← price を pirce とミス

    MsgBox total

End Sub
VB

この状態で実行しようとすると、
pirce のところで「変数が定義されていません」とエラーになります。

Option Explicit がなかったら、pirce という新しい変数が勝手に作られ、
値が入っていないまま計算されて、total が 0 になったりします。
そして「なんか total が変だな…」と、後から原因探しで苦しむことになります。

Option Explicit があると、
「おかしな状態で動き出す前に、必ず止めてくれる」
これが本当に大きいです。

「変数の宣言を強制する」をオンにして自動化する

毎回 Option Explicit を手で書くのは面倒

正直、毎回モジュールの先頭に Option Explicit と打つのは面倒です。
そこで、VBE には「新しく作るモジュールには自動で Option Explicit を入れておく」設定があります。

一度設定しておけば、以降に作る標準モジュールやクラスモジュールの先頭には、
自動的に Option Explicit が書かれた状態でスタートします。

設定手順(ここはしっかり押さえてほしい重要ポイント)

VBE を開いた状態で、次の順番で操作します。

ツール メニューを開く。
オプション を選ぶ。
「編集」タブ(または「エディター」関連のタブ)を開く。
「変数の宣言を強制する」というチェックボックスにチェックを入れる。
OK を押して閉じる。

これで、これから新しく挿入するモジュールには、自動で Option Explicit が入るようになります。

すでにあるモジュールには自動では入りませんが、
新しく勉強を始めるタイミングなら、「これから作るものは全部安全仕様」にできます。

超初心者こそ Option Explicit を使うべき理由

「難しくなる」のではなく「迷子になりにくくなる」

よくある誤解が、
「Option Explicit を使うと、変数宣言とか難しいことを考えないといけないから、初心者にはハードルが高い」
というものです。

実際は逆で、
Option Explicit を使った方が、圧倒的に迷子になりにくいです。

宣言していない変数を使ったら、その場で怒ってくれる。
スペルミスをしたら、その場で教えてくれる。
「なんか結果がおかしいけど、どこが悪いのか分からない」という沼にハマりにくくなります。

型まで完璧じゃなくていい、「とりあえず Dim する」からでOK

「変数の型(As Long とか As String とか)が難しい…」
という人も多いですが、最初から完璧にやろうとしなくて大丈夫です。

たとえば、最初はこうでも構いません。

Option Explicit

Sub Sample()

    Dim x
    Dim y
    Dim z

    x = 10
    y = 20
    z = x + y

    MsgBox z

End Sub
VB

型(As Long など)を省略すると Variant 型になりますが、
少なくとも「宣言していない変数を勝手に使ってしまう」よりは、ずっと安全です。

慣れてきたら、
「数値なら As Long や As Double」
「文字なら As String」
と、少しずつ型も意識していけばOKです。

大事なのは、
「宣言しないで使う」ことをやめる
そのための第一歩が Option Explicit です。

まとめと、次の一歩

Option Explicit は、
「このモジュールでは、変数を必ず宣言しなさい」というルールをオンにする一行です。
モジュールの先頭に書き、VBE の「変数の宣言を強制する」をオンにしておけば、新しいモジュールには自動で入ります。

これによって、
宣言漏れ
スペルミス
意図しない Variant 変数の乱立
といった“気づきにくいバグの温床”を、かなりの割合で潰せます。

超初心者向けに、次の流れをおすすめします。

新しい標準モジュールを挿入する。
Option Explicit が先頭に入っていることを確認する。
Dim で変数を宣言してから使う練習をする(型は最初はざっくりでもOK)。

ここを「最初の習慣」にしておくと、この先 VBA を続けるほど、
「あのとき Option Explicit をちゃんと使い始めておいてよかった」と必ず思います。

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