見出し画像

【Excel】  VBAを書く前に、変数の宣言を強制する

変数とは何か
指定した名前で、データを記録したり、読み取ったりできる仕組みのこと。
例えば、繰り返し10回行うマクロを作成したとします。その10回をどのように把握するか考えます。そこで、cntという変数を自身で設定して、1回処理するたびに、cntを1ずつ増やしていく。cntが10まで到達したら、そのマクロは終了みたいな使い方です。

変数の宣言とは何か
今や検索すればコードはたくさん見つかります。そのコードの冒頭には、「Dim *** as ***」と書かれていると思います。あれが変数の宣言です。

よく見かける変数の宣言
Dim i as long(繰り返し処理で使用される)
Dim cnt as long(何かの件数などを数えるとき)
Dim buf As String(中間処理などで一時的に格納するときなど)
Dim flag As Boolean(判定結果を格納するとき)
Dim msg As String(ユーザーに対して表示する文字列を格納する場合)
Dim ws As Worksheet(ワークシートオブジェクトを格納する場合)

上段の「cntという変数を自身で設定して」の場合、「Dim cnt as long」って記述します。これで「cntという変数をlong(長整数型)として使います。」という意味になります。

「Dim」とか「As」の意味は・・・分かりません。ごめんなさい。でも、宣言の型がVBAでは「Dim *** as ***」と決まっているので、それに従うまでです。

変数の宣言を、なぜ「強制」しなければならないのか。

実は、変数を宣言しなくても、マクロは使えます。(実際、Excelをインストールすると、標準では宣言しなくても良い設定になっていたかと)

しかしながら、この状態がすごく怖いってことを、最初に理解して欲しいです。ほんと。

変数の宣言が行われていないと、
・変数名の入力ミスがあっても、気づかない。
・何を実行しているか理解しづらい。
ということが発生します。

「ちゃんと動いているマクロ」と「ちゃんと動いている風なマクロ」は全然違います。「ちゃんと動いている風なマクロ」が実行されるのは、ほんと怖いです。業務で使っているマクロが、誰も気づかないけども、正確な実行結果が示されていない状態。絶対に見たくないな。

また、上段に書いた「Dim i as long(繰り返し処理で使用される)」について。例えば、i  の代わりに、flag を使って「Dim flag As long」と宣言しても、マクロは動きます。変数とは「指定した名前で、データを記録したり、読み取ったりできる仕組み」ですから、宣言することは可能です。でも絶対にやってはダメなことです。
理由は、flag は、「Dim flag As Boolean(判定結果を格納するとき)」としてよく使われている変数だから。何を実行しているか理解しづらくなる変数をわざわざ使う必要はないです。「flag が宣言されているからTrue/False があるんだろうな、と思ったら、数値?何だこのコード」と混乱を招くことはしてはいけません。

変数の宣言を強制させる設定方法
設定は至って簡単。
VBEを開きます。(Alt キーを押しならがら、 F11キーをクリックする)
そしてメニューバーから「ツール」→「オプション」を選択します。

画像1

「変数の宣言を強制する」にチェックを入れます。これで終了です。

画像2

すると「Option Explicit」と表示されるはずです。これが、変数の宣言が強制されていることを意味します。

画像3


この記事が気に入ったらサポートをしてみませんか?