変数宣言、どこでするのが正しいの?

ExcelマクロVBAセミナー初級編

セミナーでは、プロシージャを書くのに、
sub スペース タイトル Enter Tabキー
Ctrl+スペースで、Application 選んでTab、scと入力して Tabキー
次にdim i as long … と書いていきますよ、
という解説をしています。
こちらが強く頭に残っている方も多いのではないでしょうか?

セミナー受講後、実際にマクロを書いていると、
前任者の書いたマクロなどで途中で変数宣言してあるものを見かけたり、
ネットでマクロについて調べていると、
「変数宣言は直前にした方がよい」と紹介しているサイトが
あったりするかもしれません。

そのような、いろいろな書き方・意見を目にすると、
いったいどうするのが正解なのだろう、と迷ってしまいますよね。
この記事では、変数宣言に関しての、すごい改善としての解釈とおすすめ
そしておすすめする理由をお伝えしていきます。

◆どちらが見やすいか
マクロはプロシージャ内の一番上の行から1行ずつ順次処理をしていきます。
そのため、その変数を使う行よりも上の行で変数宣言してあれば、マクロは動きます。

①先頭でまとめて変数宣言をした例
②変数を使う前の行で変数宣言をした例

どちらが見やすいかというのは別にして、①でも、②でも、同じ処理をするわけです。
(①先頭でまとめて変数宣言、②同じ処理をそれぞれ変数を使う前に宣言したサンプル画像)

◆なぜ途中(直前)で変数宣言するのか
長いプロシージャの場合、1つのプロシージャで複数の処理をしていることが多いです。
例えば、処理A、処理B、処理C、D、E…と1つのプロシージャにあり、
それぞれの処理が30行以上あるとします。

プロシージャの先頭で変数宣言をし、
例えば、その中の変数aは処理Eでしか使わないものだとすると、
変数宣言してから処理Eで実際に使うまで100行以上離れてしまうことになります。
そうするとわかりづらくなってしまうので、直前で変数宣言しましょう、という主張です。
(※「直前で宣言」というのは、変数を使う1つ前の行という意味ではなく、あくまで変数を使う一連の処理の先頭ということです。)

◆すごい改善としての見解は…

①初心者のうちは、先頭に変数宣言を書いてあった方がわかりやすい

②長いプロシージャは処理を分けたほうが、メンテナンスしやすい
→細かいプロシージャにすれば、何十行も変数宣言から離れてしまうことはなくなるので、途中で変数宣言する必要性ほとんどなくなります。

③プログラムを見通す力をつけ、技術向上を図る
→これから自分がやる処理に対して、具体的にどのようにプログラムを書くのか、そのためにはどの変数がいくつ必要か、そういうことをしっかり考えながら、上からプログラムを書いていくことで、基礎力は必ず上がります
もちろん、「実際に処理を書いていって、足りない変数が出てきたら先頭に戻って変数を書き足す」ということはよくあります。
ただ、意識をもってトレーニングしないとこういう技術は身につきません。

以上の理由から、弊社のセミナー受講者さまにおすすめするのは、
変数宣言はプロシージャの先頭にまとめて書く」ということです!