[VBA] Option Explicit で変数の宣言を強制します

 今回は 変数を宣言する方法 について解説します。
 宣言するといっても、大きな声で「はい! これが変数です!」と叫ぶわけじゃありませんよ。コードの中に書くという意味です。え? そんなことわかってる? つまらん冗談を言ってないで話を早く進めろ? はいはい。まあとにかく変数はきちんと宣言しておきましょ~。しないと大変なことになりますよ~。Kobato がそう言うのだから間違いないですよ~ ...... そんなに怖い顔しないでくださいな。すぐに講座を始めますよ。
 

どうして変数を宣言する必要があるの?

 まず最初に「どうして変数を宣言する必要があるのか」について簡単にお話しておきます。そもそも VBA では宣言しなくても変数を使えてしまう仕様になっています。宣言なんて面倒だからさぼろうと思って、

 Sub testA()

  mydata = 1 + 1

  Debug.Print mydata

 End Sub

みたいなコードを書いておけば、ちゃんと変数 mydata には 2 という数字が入って結果も表示されます。このように宣言なんてしなくても、ユーザーが勝手に書いたキーワードは変数とみなされて処理されます。これで何も問題なさそうに見えますけど、

 Sub testB()

  mydata = 1 + 1

  Debug.Print mydta

 End Sub

のようなマクロを書いてしまったとします。よく見てください。Debug.Print のあとのキーワードがスペルミスで mydta となっています。このマクロを実行してもエラーになりません。このマクロでは mydata と mydta という2つの変数が用いられていることになり、mydta には何も入っていないので、実行しても何も表示されないだけです。これは簡単なマクロなので「あれ? 何も表示されないよ?」とすぐに気づきますが、もっと複雑なマクロになってくると、ちょっとした綴り間違いによって「エラーは出ないのに動作がおかしい」という事態に陥ってしまう可能性があるのです。そしてミスを取り除くために、何百行もあるコードの中から綴り間違いを探し出すという悪夢のような作業が待ち受けています。
 

Option Explicit で変数の宣言を強制します

 そのような事態を防ぐために、モジュールの一番上に Option Explicit というステートメントを書いておきます。

 Option Explicit

 Sub testC()

  mydata = 1 + 1

  Debug.Print mydata

 End Sub

 すると、このマクロを実行しようとしても

 コンパイルエラー:変数が定義されていません

という警告文が表示されます。Option Explicit によって、宣言されていない変数を使うことを禁じられるようになったのです。
 

Dimステートメントで変数を宣言します

 VBA で変数を宣言するときは Dim ステートメントを用います。
 モジュールの先頭に Option Explicit がある場合、さきほどのマクロは、

 Sub testD()

  Dim mydata As Integer

  mydata = 1 + 1

  Debug.Print mydata

 End Sub

のように修正すると問題なく実行できるようになります。

Dim mydata As Integer

の "As Integer" の部分は「この変数は整数型にします」という宣言です。ここは省略してもかまいませんけど、その場合はどんな型のデータでも入れることのできる Variant 型変数となります。できることなら用途に応じて型を定めておくほうが誤作動を防ぎやすいのですが、変数の型の種類については別の記事で説明します。
 

Option Explicit を自動で挿入します

 VBE には自動で Option Explicit ステートメントを挿入する機能があります。[ツール] 、[オプション] の順に選択すると次のような画面が現れるはずです。

 Option Explicitで変数の宣言を強制

 [コードの設定] の中にある [変数の宣言を強制する] にチェックを入れておくと、新しいモジュールを作成したときに、自動で Option Explicit を記述してくれます。

 ≫ VBA 辞典メニューに戻って他の記事も読んでくれると嬉しいな~♪

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)