クリエイティブを楽しむ新メディア 牛の歩みで更新中!クリエイティブを楽しむ新メディア 牛の歩みで更新中!
プログラム・IT
変数宣言を必須化する! ~VBAで"脱コピペ"プログラミング④
2023年5月28日(日曜日)

「脱・コピペ」第4弾でやることは、「変数宣言を必須化する」です。今回やることは簡単なので、さっそくやっていきます!

VBAの[ツール]メニューから[オプション]を実行すると、オプションウィンドウが開きます。

すると[編集]タブの/[コードの設定]のなかに[変数宣言を強制する]というチェックボックスがあるので、これにチェックをつけてONにします(すでにチェックがついている場合はそのままにしてください)。

すると、標準モジュールの先頭に「Option Explicit」との一文が書き加えられるようになり、以後、変数をあらかじめ宣言していないマクロを実行しようとするとエラーが出るようになります。

サンプルコードには変数名の間違いが多い

なぜこのようなことをするかというと、マクロが動作しない大きな原因のひとつとして、「変数名の間違い」があるからです。

例えば、利用者名を処理する際に"User_Name"という変数を用いるとします。ところがアンダーバーを付け忘れて"UserName"としてしまうことは、よくあることです。

この例でいえば、マクロの先頭で"Dim User_Name As String"という変数宣言が行なわれることが一般的ですが、ミスタイプの産物である"UserName"はもちろん宣言されていません。これが原因で、このマクロは誤作動を起こすことになります。

コピペしてきたマクロが「なぜかうまく動かない」ということがよくありますが、その原因が変数名のミスタイプである場合は、「変数宣言の強制」によって気付くことができるのです。

そして、原因さえわかれば修正は簡単です。

今あるマクロが動かなくなったら

実際に「変数宣言の強制」をしてみると、既存のマクロでエラーが出まくることがあります。

変数名が間違っている場合だけでなく、そもそも変数宣言をしていない場合もあるからです。

そして、それぞれの場合の対処方法は少し異なります。

前者「変数名が間違っている場合」は、エラーが出た変数の名前と、"Dim"などによって宣言済みの変数の名前とを見比べて、宣言済みの変数名に合わせる必要があります。

後者「変数宣言をしていない場合」は、エラーが出た変数と似た名前の変数が宣言されていないはずですから、自分で変数宣言を行なう必要があります。

プログラミング初心者のうちに扱うような単体のマクロであれば、コードの先頭付近に"Dim ??? As ***"という変数宣言の一文を加えることで動作するはずです。もちろん"???"の部分は宣言すべき変数の名前に、"***"の部分は変数の「型」にする必要があります。

変数には、それが数値か文字列かといった「型」の違いがあり、VBAの場合は数値なら"As Integer"、文字列なら"As String"と記述します。

ただし、初心者のうちは「型」がなんだか見分けられないこともあるでしょう。その場合は、"Dim ???"とだけ記述して「型」を固定しない方法もあります。VBAに慣れていく過程で変数の「型」はきちんと決められるようになるべきですが、とりあえず今は無視してもかまいません。

なお、以上のような「対処」を行なってもマクロがうまく動かない場合もあります。そのような場合は、残念ながらそのマクロは現状では簡単には直せない「手に負えないもの」だと言えるでしょう。それがコピペしてきたものであれば、あらためて別のサンプルを探してみるのが近道かもしれません。

特に、変数を宣言せずに使っているマクロは、あまり熟練した人が書いたものではないものと考えられます。それを手直しして利用するのは難度が高く、疲弊しがちなのでご注意ください。

(つづく)

コメントを記入

メールアドレスが公開されることはありません。 が付いている欄は必須項目です