VBAアセットも、これまでは変数の宣言を必ず行ってきました。
変数を宣言しておくと変数名の入力の間違いを防止できますし、併せて型を指定しておくと変数値の入力を誤った場合にどこに誤りがあるのかがわかりやすくなります。
このため、VBEのオプションで「変数の宣言を強制する」のチェックを付けて、変数の宣言を行わなければならない状態にしてきました。
VBAの達人たちも、もれなくそうすることを推奨しています。
しかし、30年以上もVBAを使い続けてみる(こんなに長く使い続けることになるとは全く思っていませんでした)と、「本当にこれが必ず必要なのか」と思うようになりました。
理由は、めんどくさいからです。
例えば、For ~ Next構文を使うたびに、「Dim i as long」 なんて書く必要があるのでしょうか?
「i」を書き間違えることなんてありえませんし、「i」にlong以外の数値を代入してしまうなんてことも考えられません。
にもかかわらず、呪文のように「Dim i as long」と唱えることに嫌気がさしてきました。
加えて、変数の宣言の意味合いも変わってきたからです。
私がVBAを使い始めたことは、プロシージャの最初に変数をまとめて宣言する書き方が主流でした。
それには、最初にプロシージャの設計を明らかにするという意味合いがあったと思っています。
しかし、最近では使う直前に変数を宣言するのが主流になってきました。
その方が宣言を探しやすいからのようですが、「だったらいらないんじゃない?」と思うようになってきました。
もちろん、これまで変数の宣言や型の指定を行うことでエラー発生を回避できたこともあったと思います。
しかし、その発生頻度を考えると、毎回呪文を唱えることに十分な費用対効果があったのか疑問です。
ただし、誤入力しそうな長い変数名の場合は、変数を宣言しないと、変数名を自動入力できないデメリットがあります。
また、クラス型(オブジェクト型)およびユーザー定義型の場合は型を指定しないと「.」の後ろに自動候補が表示されないデメリットがあります。
というわけで、今後はVBAアセットのスタイルを次のように変更します。
- VBEのオプションから「変数の宣言を強制する」のチェックを外します。
- 数値型や文字列型は、変数名が長い場合だけ変数を宣言します。型は指定しません。
- クラス型(オブジェクト型)およびユーザー定義型は、変数を宣言し、型を指定します。
コメント
表題および内容を「変数は必ず宣言する」から変更しました。
型の指定を行わない場合を「数値型や文字列型」に限定しました。