この記事では VBA で変数を宣言する方法と Option Explicit ステートメントを使って 変数宣言を強制する方法 について解説します。宣言するといっても、大きな声で「はい! これが変数です!」と叫ぶわけじゃありませんよ。コードの中に書くという意味です。
え? そんなことわかってる?
つまらんボケとかいらない?
ちなみに「変数を宣言する」を英語で “declare the variables” といいます。
これは、ただの雑学。
え? 話を早く進めろ?
はいはい。それでは講座を始めます。
まず最初に「どうして変数を宣言する必要があるのか」について簡単に説明しておきます。そもそも VBA では宣言しなくても変数を使えてしまう仕様になっています。宣言なんて面倒だからさぼろうと思って、
'[VBA] 変数宣言を省略したプロシージャ(1)
Sub Declaration_1()
mydata = 1 + 1
Debug.Print mydata
End Sub
みたいなコードを書いておけば、ちゃんと変数 mydata には 2 という数字が入って結果も表示されます。このように宣言なんてしなくても、ユーザーが勝手に書いたキーワードは変数とみなされて処理されます。これで何も問題なさそうに見えますけど、
'[VBA] 変数宣言を省略したプロシージャ(2)
Sub Declaration_2()
mydata = 1 + 1
Debug.Print mydta
End Sub
のようなマクロを書いてしまったとします。よく見てください。Debug.Print のあとのキーワードがスペルミスで mydta となっています。このマクロを実行してもエラーになりません。このマクロでは mydata と mydta という2つの変数が用いられていることになり、mydta には何も入っていないので、実行しても何も表示されないだけです。これは簡単なマクロなので「あれ? 何も表示されないよ?」とすぐに気づきますが、もっと複雑なマクロになってくると、ちょっとした綴り間違いによって「エラーは出ないのに動作がおかしい」という事態に陥ってしまう可能性が大いにあるのです。そしてミスを取り除くために、何百行もあるコードの中から綴り間違いを探し出すという悪夢のような作業が待ち受けています。
【VBA】Option Explicit
そのような事態を防ぐために、モジュールの一番上に Option Explicit というステートメントを書いておきます。
'変数の宣言を強制
Option Explicit
Sub Declaration_3()
mydata = 1 + 1
Debug.Print mydata
End Sub
Declaration_3() を実行しようとしても
コンパイルエラー:変数が定義されていません
という警告文が表示されます。Option Explicit によって、宣言されていない変数 mydata を使うことを禁じられるようになったのです。
【VBA】Dim ステートメント
VBA で変数を宣言するときは Dim ステートメントを用います。モジュールの先頭に Option Explicit がある場合、Declaration_3() は、
'変数の宣言を強制
Option Explicit
Sub Declaration_4()
Dim mydata As Integer
mydata = 1 + 1
Debug.Print mydata
End Sub
のように修正すると問題なく実行できるようになります。
Dim mydata As Integer
の “As Integer” の部分は「この変数は整数型にします」という宣言です。ここは省略してもかまいませんけど、その場合はどんな型のデータでも入れることのできる Variant 型変数となります。できることなら用途に応じて型を定めておくほうが誤作動を防ぎやすいのですが、変数の型の種類については別の記事で説明します。
ちなみに、VBE (Visual Basic Editor) には自動で Option Explicit ステートメントを挿入する機能があります。[ツール] 、[オプション] の順に選択すると次のような画面が現れるはずです。
[コードの設定] の中にある [変数の宣言を強制する] にチェックを入れておくと、新しいモジュールを作成したときに、自動で Option Explicit を記述してくれます。
コメント