変数の宣言の強制について

変数の宣言の強制を行う方法と理由、それの本質的な必要性について

変数の宣言の強制とは、コーディング中に宣言されていない変数の使用を不可にする設定です

宣言していない変数のエラーメッセージ
強制時に発生するエラー

この設定を行うと、宣言されていない変数を使用すると画像のようなエラーが発生します

コンパイルエラーなので、プロシージャの実行前に発生します
ここでOKボタンをクリックすると、対象の変数が選択状態になります

この設定はVBEのオプション設定ではなく、コードを記載することで設定されます

変数の宣言を強制するコード
実際の入力状態

コードは宣言範囲に入力する必要があります
宣言範囲とは、モジュールの最上部になり、画像の様にプロシージャの外側の最上部に記入します

これでこのモジュールでは変数の宣言が強制された状態になります
また、この設定はモジュールごとに必要になるのでシートやユーザーフォームなどにも入力を行う必要があります

全てにいちいち入力するのはめんどうなので、自動入力できる設定が行えます

オプション設定の開き方
設定オプションの場所

まずはオプション画面を開いてください

変数の宣言を強制するオプション設定
設定画面の項目箇所

編集タブの「変数の宣言を強制する」にチェックを入れると、これ以降に作成されたモジュール全てに上記のコードが自動的に入力されます

これ以降に作成されたものなので、この設定前に作成されたものは入力されないので、必要であればコピペして入力を行います

変数の宣言の強制の必要性について

上記の内容で簡単に入力を行うことが出来るようになった変数の宣言の強制ですが、これの必要性について話しておきます

これを使用する理由は、変数名の入力時にタイプミスにより別の変数を意図せず作ってしまい、バグを誘引させる要素を排除するために行います
変数名のタイプミスとは、そのほとんどがスペルミスです

例えば、変数を英単語にすると「variable」です
これを変数名にしたと仮定しますと「Dim variable As String」とまずは変数の宣言を行います

その後コーディング時に変数名を入力しますが、その時にスペルを間違い「valiable」と入力してしまった
そうした場合、変数の宣言の強制を行っていない場合はこのプロシージャでは2つの変数が作成されることになります

1つ目は当然「 variable 」の String 型です、2つ目が「 valiable 」です

そして、この2つ目の変数は宣言が省略されているため変数の型はVariant型になります

これに気付かず1つ目の変数の文字列をいくらコード中に更新しても出力すると更新されない、という結果に陥ります
これを変数の宣言の強制を行うとコンパイル時にエラー表示で教えてくれるので事前に発覚するわけです、なので有用な設定なのです

変数の宣言の強制の本質としての必要性

ここで1つ本質的な話としてですが、これはあくまでもコーディングを行う者にミスを知らせるものであってコーディングの効率を上げるものでも無いし、そもそもミス入力が無ければ必要性は無いように思います

とはいえ、ミスは必ずでます。これはどうしようもありません
ですが、別の方法でもこのミスを無くすことができます

スペルミスによる大きな要因は、英語表記やローマ字表記によるものです

これは日本人である以上、慣れていないんだからミスをするのも当然です

なので日本語を使いましょう、ただそれだけでこのスペルミスは無くなります
さらに言うなら、変数名に日本語を使用すればその単語がすぐに理解できるため、変数の用途説明のコメントを最小限に減らすこともできます

しかし、日本語使用でよく挙がる問題があります
それは、半角全角の切り替えを行わないといけない点です、これはどうしようもないです

ですがここで1つ考えてみてください。
コードの解説であるコメントを入力する際や、メッセージボックスの文章を入力する際に必ず行いますよね?
確かに、この切替操作を全く行わないならそっちが優位です

操作回数が5回より0回は圧倒的に優位ですが、10回と5回では圧倒的に優位とまでは言えません、それほどに0回というのは強みです
これは業務改善を行ううえでも重要な考えです

でも、上記にもあるようにそれは日本語を使う事がある以上不可能でしょう
なので、この半角全角を切り替えるのがわずらわしいという理由は少し乱暴です

変数の宣言時に1度日本語を入力するだけでよければ、あとは半角で問題ない訳です
そのために使用するのがインテリセンス入力です
これはいわゆる予測変換で、メソッド等以外にも変数も使用可能です
そしてこれを有効に利用するために、日本語変数名の前になるべく意味のないアルファベットを入力します。
こんな感じです「Dim gh日本語変数 As String」
頭文字のghにはなんの意味もありません、キーボードで入力しやすい文字でいいと思います

これをしておくとインテリセンス入力が圧倒的に楽になります
というのも、インテリセンスのリストの並びはアルファベット順、次に日本語順となっているので日本語のみだとリストから探すのが大変になりますし、上記の通り半角全角の切り替えを少なくしたいからです

変数のインテリセンス入力画面

画像の様に、「gh」と入力してインテリセンス表示の「Ctrl+Space」でリストが表示されます
あとは選択した項目で「Tab」を押せば入力されます
この方法は、日本語未使用でも利用できるので活用してください

頭文字に意味を持たせないようにと言いましたが、それは変数名にその役割を持たせるべきであってそこに意味を持たせると読み解くのに余計な手間が発生する可能性があるのと、付けるときにいちいち考えるのも面倒です
VBAの定数でも「vb~~」となっているように、全く無意味ではないけどその変数名に対して意味があるわけでは無いようにしたほうが、変数名に集中できます

変数名やプロシージャ名など、日本語が使えるところは積極的に使っていってください。

それがExcelVBAの言語仕様です、開発者は言語仕様を使い切ってください
それがこの言語を作ってくれた人への最大限のリスペクトです

なお、自分は変数の宣言の強制は使用していません
宣言箇所にあれがずっと居座っているのが気持ち悪いし、変数名の入力ミスも上記のようにそもそもタイピング入力しませんのでありません
開発者の意図は分かりませんが、それが標準設定ですしね

ただし、強制しないからと宣言自体を行わないことは絶対にしないでください
これをする人がいるから、この設定が必須と言われてしまいます
変数の宣言の強制設定は強制しませんが、変数の宣言は強制します!