モジュールにVBAを記述しているときに、モジュールの上部に表示される「Option Explicit」。
- この表示はいったいどんな意味があるの?
- またどのように利用するんだろう?
その使い方について解説していきましょう。
モジュール内のOption Explicitとは
この「Option Explicit」とは、簡単に言うのであれば、
「変数やAPI関数を記述する場所」です。
<Option Explicitとは・・・>
- モジュール内の変数・API関数を表示する領域
- Option Explicitを記載する場合、変数宣言が必須
一度この「Option Explicit」を記述することで、変数を宣言していない場合、
コンパイルすると、「変数が宣言されていませんよ。」とエラーが表示されます。
また逆にこの表示が記述されていないモジュールでは、変数の宣言がなくてもエラーが表示されないため、記述が曖昧な表示になることがあり、正しく処理が動作してなくても分析がしにくくなってしまいます。
そのため、このOption Explicitは、なるべく記述しておいた方がよいものとなります。
Option Explicitの画面イメージ
表示箇所は、下記に記載される「モジュールの上部」がOption Explicitの宣言セクションになります。
このOption Explicit部分に宣言してあげましょう。
Option Explicitの使い方
それでは、このOption Explicitの使い方について解説していきましょう。
Option Explicitは、主に変数やAPI関数を記述する際に使用しますが、その他にも下記のメリットがあります。
<Option Explicitの主な使い方と利用メリットとは>
- モジュール内のWindows API関数
- モジュール内の共通変数を宣言する
- モジュール内であればCall文による変数引き渡しの宣言が不要
- 変数の宣言が誤っていないかを確認できる環境を作るため
主に、上記4つの場合に、利用するとよいのですが、基本的に、プログラムを記述する場合には、このOption Explicitをあらかじめにセットするようにしてしまいましょう。
Option Explicitはどんな時に使用するの?
このOption Explicitを使用するメリットには、主に下記の3つがあります。
<Option Explicitの3つの利用目的>
- 記述を丁寧にまとめる時
- 変数の使い方が間違っていないかをエラー確認ができる
- 同一モジュール内で変数を使用したい時
【記述の一例】
1 2 3 4 5 6 7 8 9 10 11 12 13 | Dim a As String 'Private とDim での宣言は同じ意味をもつ Private B As String '同じモジュール内ならどこからでも使用可能 Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) ' API関数 Option Explicit ------------------------------------------------------------------------------------------------------ Sub Main() Dim strData As String 'ここのMainでしか使用できない strData = "test" MsgBox strData End Sub |
Option Explicitを使用しないとどうなるの?
変数を使用しないのであれば、こちらの表示は消しても構いません。
しかし、変数を宣言するのであれば、Option Explicitを記述してその上に変数を宣言するようにして下さい。
それは、どうしてですか??
もし同じ変数の宣言が重複していたら、どうなると思いますか?実は、変数宣言した値に思ってもいない値が入ってきてしまいます。
下記をご覧下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Dim a As String 'Private とDim での宣言は同じ意味をもつ ⇒どちらかを削除する Private B As String '同じモジュール内ならどこからでも使用可能 Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) ' API関数 Option Explicit ------------------------------------------------------------------------------------------------------ Sub Main() Dim strData As String 'ここのMainでしか使用できない Dim a As String '上で使用しているので×(使用不可)⇒どちらかを削除する strData = "test" MsgBox strData End Sub |
この場合には「Dim a as string」が重複しています。この記述だと、Option Explicitを使用していれば、「重複しています。」と、エラーが表示されます。
ここでもしOption Explicitを宣言していない場合、エラーも表示されません。
これが非常に危険です。だから、この宣言が必要なんですね~。
Option Explicitのおすすめな自動表示設定方法
そこでおすすめな設定があります。
それがこちら。
ポイント
【自動表示の設定方法】
・「ツール」⇒「オプション」⇒「変数宣言を強制する」にチェックを入れる
上記手順に従って「変数の宣言を強制する」にチェックを入れておきましょう。すると、変数宣言が誤った場合にエラーメッセージを出して、間違えを気付かせてくれます。
こうした自動デバッグ機能を使って、正しい変数の宣言の仕方を学ぶようにしていきましょう。
まとめ
このように、「Option Explicit」は、VBAの変数宣言をする上で、間違いや重複がないかを自動チェックしてくれる。プログラマーに気付かさせてくれるので、非常に便利な機能の一つです。
だからこそ、プログラムを記述するタイミングであらかじめに記述してしまう基本事項の一つでもあります。
しっかり機能の意図を理解しながら、一つ一つ覚えていきましょう。