セルの範囲や図形に名前を付けられるのは御存じですよね?。
普通にExcelを使う時に便利なんですが、VBAで利用する場合も同じなんです。
何が良いかと言うと、プログラムがわかりやすくなるという事もありますが、それよりも以下の事の方が大きいような気がします。
例えば、セル B2 の値を表示するマクロがある(通常はもっと複雑ですが、例という事で)とします。
マクロは次のような感じですね。
Option Explicit Sub thisMacro() MsgBox Range("B2") End Sub
ちょっとしたマクロは(今は)これで十分です。但し、後日 B2 ではなく B3 に変更しないといけなくなるなんて事もありますね。
"B2"を"B3"に変更すればいいだけですが、もしも"B2"と書いている部分が複数あったとしたらどうでしょう。
うっかりもんの私は、修正もれがあるかもしれません。
これを防ぐには、以下のように定数を利用するのが一般的でしょうかね。
Option Explicit Const CELL_NAME = "B2" ' <-- これ Sub thisMacro() MsgBox Range(CELL_NAME) End Sub
これだと、定数の値を一つ変更すればいいだけですね。だいぶ保守しやすくなりました。
でも、これも面倒だなんて思う事ないですか?
たかが、セルの場所が変わっただけでマクロを変更しないといけないなんて。
では、"B2"セルに"TARGET"とでも名前をつけてみると...マクロは以下のようにすればいいですね。
Option Explicit Const CELL_NAME = "TARGET" ' <-- これ Sub thisMacro() MsgBox Range(CELL_NAME) End Sub
セルの位置が変わってもマクロを修正する必要はありません。"B2"の名前を"B3"に移動してやればいいだけです。
この程度の作業なら、マクロを知らなくてもできますよね?。
ちなみに、B2のセルをB3にドラッグで移動すると、名前も移動します。
小さな事ですが、マクロに触れずに変更できました。どんな感じ?