エクセルマクロVBAではOption Explicitを設定すると変数宣言を強制させることができます。
Option Explicitは入力しておくと、変数宣言が必須になります。そのせいで変数宣言していないとエラー表示が出ます。
しかしOption Explicitがあるおかげで、タイプミスによる意図しない結果が出力されるリスクを減らすことができます。
そのため私としてOption Explicitを設定することを推奨しています。
このページでは、Option Explicitの設定方法と宣言理由を紹介します。
・「Option Explicit」の宣言を推奨する理由
目次
「Option Explicit ステートメント」とは、変数宣言を強制すること
「Option Explicit」とは、変数宣言を強制するためのものです。
Explicitとは「明示的な」という意味の英単語で、変数宣言を明示するわけです。
変数宣言とは
Option Explicitを入れておくと、変数を定義していない場合エラーが出てプログラムが実行されません。
つまり「Option Explicit」を入力すると、たとえば「Dim gyo as Long」のように変数宣言をしないと、「gyo」という変数を使えないのです。
もし「Option Explicit」を入力しているのに、「Dim gyo as Long」を書かずに「gyo = 1」と書くと、エラーメッセージが表示されます。
このような面倒な部分はありまうが、私はOption Explicitについて記述するべきと考えています。
その理由について、以下で説明していきます。
「Option Explicit ステートメント」のメリット・デメリット
今回はOption Explicitについて説明するために、以下のサンプルプログラムを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub WriteNumber() 'プログラム2|A1~A100に数値1~100を出力 Dim gyo As Long For gyo = 1 To 100 Worksheets("Sheet1").Range("A" & gyo).Value = gyo Next 'プログラム3|プログラム終了 End Sub |
プログラム0|変数設定の指定
1 |
Option Explicit |
「Option Explicit」ステートメントを使用する場合は、どのプロシージャよりも前のモジュールに記述する必要があります。
Option Explicitを使うデメリット
このOption Explicitを宣言すると、以下のようなすべての変数に対して、宣言が必要になります。
Private ステートメント
Public ステートメント
ReDim ステートメント
Static ステートメント
Option Explicitを記入しているのに変数宣言していないとエラーが発生
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub WriteNumber() 'プログラム2|A1~A100に数値1~100を出力 'ここでDim gyo as Longの記載がないため、gyoの変数宣言がないので、エラー発生 For i = gyo To 100 Worksheets("Sheet1").Range("A" & gyo).Value = gyo Next 'プログラム3|プログラム終了 End Sub |
Option Explicitを記入しているのに、変数宣言をしていない場合、上記のようにエラーでプログラムが実行されません。
上記の事例では、「Dim gyo as Long」を削除したため、変数gyoが宣言されていないことになっているからです。
Option Explicitがないと、変数なしでもエラーが出ない
逆にOption Explicitがないと、変数なしでもエラーが出ません。
上記のように「Option Explicit」がなければ「Dim gyo as Long」のような変数宣言も不要となるのです。
このように説明すると、ption Explicitは不要に見えるかもしれません。
しかし私はOption Explicitはあったほうが役に立つと考えています。
Option Explicitを使うメリット
VBAプログラムを作成していると、変数を多く使うことがあります。
そのとき、変数のタイプミスをしたり、重複して使ったりしてしまうことがあります。
つまり気づかないミスをしてしまうことがあるのです。
しかしOption Explicitを入力しておくと、タイプミスをVBAが教えてくれます。
Option Explicitを入力しておくと、タイプミスをVBAが教えてくれる
たとえば、変数gyoと書くべきところgtoとタイプミスしたとします。
Option Explicitがあると、上記のように変数宣言していない変数を教えてくれます。
タイプミスした変数は変遷宣言していない変数であるため、このようにミスをVBA側で見つけてくれるのです。
VBAプログラムを実行すると、A列に数値を出力してくれます。
Option Explicitを入力しておかないと、意図しない結果になることがある
一方で、変数gyoと書くべきところgtoとタイプミスしたにもかかわらず、Option Explicitが入力していなかったとします。
これはエラーなしでプログラムが実行されます。
しかし正しい結果が得られません。
なぜならgtoという変数は設定されていないため、「gto=””」として扱われるからです。
その結果、VBAプログラムを実行したのにも関わらず、A列に数値は出力されません。
Option Explicitを入力しておかないと、原因が分からなくなる
さて、ここで紹介した事例はプログラムが短いので、変数のタイプミスとすぐにきづくことできます。
しかしプログラムが長くなったらどうでしょうか。
変数のタイプミスという原因を特定できるまでに時間がかかってしまうことが想像がつくはずです。
もしOption Explicitを入力しておけば、プログラムが意図しない結果になったとき、変数のタイプミスという原因を除外できます。
プログラムを作っていくなかでエラーを探すのは苦労することは少なくありません。
そのためエラーを排除するためにOption Explicitを入力することは大きな効果があると考えています。
Option Explicitの設定方法
1. 直接入力
先頭にOption Explicitを直接記述することで対応することが可能です。
しかしすべてのモジュールに毎回、Option Explicitを手入力するのは面倒です。
そこで設定そのものを変更しておくと便利です。
2. 設定変更
VBEのには「自動的にOption Explicitが記述される」オプションがあります。
2. 「オプション」をクリック
3. 「編集」タブの「変数の宣言を強制する」にチェックを入れる
4. 「OK」をクリック
これをオンにしておくと、挿入されたモジュールでは、先頭にOption Explicitが自動入力されます。
なお初期設定では、このオプションはチェックオフになっています。
ちなみにマクロを書き始める前に、出来れば設定しておいた方が良いオプションが他にもあります。
以下のページで紹介していますので、興味がある人はご覧ください。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
Option Explicitに関する補足
「Option Explicit」ステートメントを使用しない場合、宣言されていな変数はすべてVariant型で処理されます。
これは変数を扱うときに覚えておくと役立つ知識ですが、初心者のうちは特に気にしなくても問題ありません。そのため補足として紹介しておきます。
まとめ
→なぜならコーディングのミスを減らせるからです。
Option Explilcitは必須ではありません。「Option Explicit」を入力しなくても、プログラムは動きます。
しかしOption Explicitを入れておくことで、変数の誤記によるエラーを防止することができます。
結果的にプログラム作成速度が上がるので、「Option Explicit」を入力することを習慣化することをオススメします。