目次
Option Explicit ステートメント
今回の投稿は、 ExcelVBA で変数の宣言を強制したい場合のマクロの作成方法を書いています。具体的には、 Option Explicit ステートメントを一文書くことで、変数の宣言を必須にすることができます。 Explicit の英語の意味をインターネットの辞書で調べてみますと「明示的」という意味になるようです。
宣言を強制する前
下記のマクロのコードは、 Option Explicit ステートメントを記述する前のものです。
Sub メッセージボックスを表示するマクロ()
a = "ABC"
MsgBox a
End Sub
上記マクロを実行してみると、エラーが発生することなくダイアログボックスにメッセージが表示されました。
宣言を強制した後
次は、 Option Explicit ステートメントを記述した後のマクロを見てみます。「Sub」よりも前に「Option Explicit」の記述を追加しています。変数の宣言を強制している状態になっています。
Option Explicit
Sub メッセージボックスを表示するマクロ()
a = "ABC"
MsgBox a
End Sub
上のマクロを実行すると、「コンパイルエラー 変数が宣言されていません。」とエラーメッセージが表示されます。変数の宣言が強制されている状態で、変数「a」の宣言を行っていないのでエラーが発生しているようです。
マクロを修正してみることにします。変数「a」の宣言を行ってみます。
Option Explicit
Sub メッセージボックスを表示するマクロ()
Dim a As String '変数「a」の宣言を行ってみます。
a = "ABC"
MsgBox a
End Sub
上のマクロを実行すると、エラーは発生せず、ダイアログボックスが表示されました。
Option Explicit を書く場所
Option Explicit ステートメントを書く場所は、「Sub ... End Sub」「Function ... End Function」よりも前になります。私の場合は、先頭の方に書いていることが多いです。
Option Explicit
'subプロシージャよりも前
Sub メッセージボックスを表示するマクロ()
Dim a As String
a = fx1("ABC")
MsgBox a
End Sub
'Function プロシージャよりも前
Function fx1(a As String)
fx1 = a & a
End Function
Option Explicit ステートメントをモジュールの先頭に書いておくと、そのモジュール内で変数の宣言が強制される状態になるようです。
「Module1」に「Option Explicit」と記述してあっても、「Module2」「Module3」では、変数の宣言が強制にならないようです。
テスト環境
- Windows 10
- Microsoft Office Excel 2003
あとがき
変数の宣言を必須にしておくと、宣言済みの変数の値を間違って上書きしてしまって、マクロの動作結果が変わってしまう等のミスを少なくできる気がします。
私の場合は、マクロのコードが長めになってきた時、変数の数が多めになった時に、 Option Explicit ステートメントを使用しています。
以上閲覧ありがとうございました。