エクセルVBAでよく使うコードの備忘録。VBAでコードを書く際に変数の宣言を強制するOption Explicitをデフォルトでエディタに表示させる設定について。
変数宣言をしないことによる弊害
VBAでは、何も設定しなければ特に変数を事前に宣言する必要はありません。ある値を変数に代入したいと思ったら、唐突に変数に代入することができます。
Public Sub Test()
'--- aという変数はコード内で定義されていない ---'
'--- が、下記のようにいきなり値を代入してもエラーにならない ---'
a = 1
End Sub
これって何か問題があるのでしょうか?
考え方によっては「変数を事前にいちいち宣言しなくてもよいため書かなくてはいけないコードの行数が減り作業の効率化が図れる」とも言えます。しかし、他の多くのVBAエキスパートの方々が勧めているように、変数宣言をしないことによる大きなデメリットがあります。それはバグの温床になるということです。例を見てみましょう。
次のコードは変数宣言していない「val」という変数に1から10までの数字順次足し合わせていくコードです。わかりやすいようにForループは使わずに逐一書いてます。
Public Sub SumTest()
'--- 変数valに1から10までを順次足し合わせる ---'
val = 1
val = val + 2
val = val + 3
val = val + 4
val = val + 5
val = vel + 6
val = val + 7
val = val + 8
val = val + 9
val = val + 10
Debug.Print val
End Sub
正しく計算されていれば、1から10までを足し合わせた55という数字がイミディエイトウィンドウに表示されるはずですが、上記のコードには誤りがあります。
単純ですが6を足しているところの変数名に打ち間違いがあります。「val」とすべきところを「vel」としてしまっているのです。このため、上記のコードを実行しても計算結果は6から10を足し合わせた40にしかなりません。
変数宣言を強制していないと、このような打ち間違いを見逃してしまう可能性が高くなります。変数宣言をしなくてもよいというのは、好意的に見れば我々の手間を省いてくれているように見えますが、上記のようにバグがあったとしてもプログラムの解釈でそのバグが見逃されてしまう可能性があるのです。
もちろん上記の例のような短いコードであればバグを見つけるのは容易ですが、これが何百何千という長さのコードであった場合は大変な労力になります。
Option Explicitを入れ変数宣言を強制する
変数宣言を強制して、宣言されていない変数が使われていた場合はエラーになるようにすることで上記のようなバグを見つけやすくすることができます。宣言の強制は簡単で、コードの冒頭に「Option Explicit」の一文を追加するだけです。上記の例で言うとこんな感じになります。
変数宣言を強制する
Option Explicit
Public Sub SumTest()
...
End Sub
変数の宣言文を書く時間はそれほど長くなく有限ですが、バグを見つける時間は無限に長くなりえます。作業効率化のためにご自身でコードを書く際は必ずモジュールの冒頭にこの一文を入れるようにしましょう。
変数宣言を自動で強制する
とはいえ、毎回変数宣言を強制するOption Explicitを手入力するのは面倒です。忘れてしまうこともあるかもしれません。VBAのエディタではオプション設定で変数宣言をデフォルトで強制できるので、サクッと設定しておきましょう。
エディタの上部メニューより「ツール > オプション」と進みます。
オプションというタイトルのウィンドウが開くので、その中の「編集」タブ内で「変数の宣言を強制する」にチェックを入れOKボタンを押します。このオプションウィンドウから他の設定も変更することが可能ですが、内容がよくわからないうちに適当に触るのはやめておいた方が無難です。
このように設定しておけば、コードを書くためにモジュールを開くと自動で「Option Explicit」の一文が入るようになります。