Excel VBAでマクロを作り始めたばかりの頃は、「とにかく動けばOK」と思って書いていたという方も多いのではないでしょうか。
実際、最初のうちはそれで問題ないように見えます。けれども、あとから見返したときに「この処理、何をしてたんだっけ…?」「どこを直せばいいの?」と悩んだ経験はありませんか?
筆者自身も、VBAに慣れ始めた頃に「処理の意味がわからず最初から読み直し」「修正箇所が多すぎて挫折しそうになる」といったことを何度も経験しました。
特に、変数を使わず直接セル範囲を指定していたため、仕様変更のたびに複数箇所を直さなければならず、とても非効率でした。
この記事では、初心者の方が“あとから困らないコード”を書くための基本ルールを、わかりやすく解説します。
「後から読みやすく」「他の人が見ても理解できる」コードを書くために、ぜひ覚えておきたい3つのコツを中心に紹介します。
どうしてVBAは「後から読みにくくなる」のか?
VBAマクロは、一度作って動けば満足してしまいがちですが、**本当に大変なのはその後の「修正」や「メンテナンス」**です。
初心者がよく陥る「読みにくくなる原因」を押さえておくと、自然と見直しやすいコードを書く意識が持てるようになります。
その場のノリで書くと、自分でも後から読めなくなる
コードを書いているときは「何をしているか」が頭に入っているため、変数名を省略したり、コメントを入れずにどんどん進めてしまいがちです。
ですが数週間、あるいは数ヶ月経ってからそのコードを開くと、「この処理、何だったっけ?」という状態になってしまうことがよくあります。
修正箇所が多いコードは、ミスや手戻りの原因に
セルの範囲やシート名をコード内のあちこちで直接指定していると、仕様変更があった際にすべてを見直さなければならなくなります。
1か所修正しても、他の箇所に同じ内容が残っていて不整合が発生することも。
他の人に渡せない・引き継げないコードになってしまう
自分では分かっていても、他の人が見たときに処理の内容が読み取れないコードは、業務用としては不適切です。
特に複数人で共有するExcelファイルでは、**「見ただけで処理の概要がわかるコード」**であることがとても大切です。
このように、コードの読みやすさや修正のしやすさは、あとからの作業効率を大きく左右します。
次の章では、初心者でも実践できる「読みやすく・修正しやすいコードの書き方」3つのポイントを具体的にご紹介します。
読みやすく修正しやすいVBAの書き方 3つのポイント
「後から読み返してもわかる」「他の人に渡しても困らない」コードを書くためには、最初から少しだけ“書き方の工夫”を意識しておくことが大切です。
ここでは、初心者の方でもすぐに実践できる、読みやすく・修正しやすいVBAの書き方の3つのコツを紹介します。
① 変数名は「意味が伝わる名前」にする
NG例:
→ 「a」だけでは、この変数が何を表しているのか全くわかりません。
OK例:
→ 名前を見るだけで「売上データの範囲なんだな」とわかります。
ポイント:
-
頭に
rng
(Range)やws
(Worksheet)などの略記プレフィックスをつけると、データの種類がひと目で分かる -
長すぎず、意味が読み取れる名前がベスト
② コメントで処理の内容を残しておく
例:
→ コメントがあることで、「この処理は何のためにやっているか」がすぐに分かるようになります。
ポイント:
-
必ずしも全行にコメントを書く必要はありません
-
**「ブロックの始まり」「処理の意図が伝わりにくい箇所」**だけでもOK
③ よく使う処理は再利用・別管理する
同じ処理を何度もコピペしていると、1箇所直しただけでは他が修正されず、バグの原因になります。
そんなときは、処理をSubやFunctionにまとめて再利用できる形にするのがおすすめです。
例(汎用的な最終行取得処理):
メリット:
-
使いたい場所で呼び出すだけでOK
-
処理の意味も明確、保守も簡単
※Functionは、よく使う処理をひとまとめにしておける「自作関数」のようなものです。複数のマクロで再利用したい処理があるときに特に便利です。
書き方や使い方の詳細は、別記事【VBAのFunctionの基本|作成から呼び出し方まで】で解説予定です。
この3つのポイントを意識しておくだけで、「動くコード」から「後から助かるコード」へと進化させることができます。
良い例・悪い例のコード比較で違いを見てみよう
「変数名を工夫する」「コメントをつける」「処理を再利用する」といったポイントは、実際のコードを見るとその効果がよくわかります。
ここでは、同じ処理内容で**書き方が異なる2つのコード(悪い例と良い例)**を比較してみましょう。
悪い例(読みづらく、修正しにくいコード)
Sub test1()
Dim a As Range
Set a = Range("B2:B100")
For Each c In a
If c.Value = "" Then c.Value = 0
Next
End Sub
問題点:
-
変数
a
が何の範囲かわからない -
コメントが一切ないため、何の処理をしているのか推測する必要がある
-
処理内容が他にもあれば、すぐに迷子になる
良い例(読みやすく、後から修正しやすいコード)
Sub 空欄をゼロに置換()
Dim rng売上範囲 As Range
Set rng売上範囲 = Sheets("売上データ").Range("B2:B100")
' 売上データの空欄セルを0に置き換える
Dim c As Range
For Each c In rng売上範囲
If c.Value = "" Then c.Value = 0
Next
End Sub
改善点:
-
rng売上範囲
という変数名でどの範囲を扱っているのかが明確 -
サブプロシージャ名もわかりやすく、「何の処理をするか」が名前から読み取れる
-
コメントが入っているため、内容がひと目でわかる
このように、処理の中身は同じでも、書き方ひとつで「理解のしやすさ」「保守のしやすさ」に大きな差が出ます。
とくに初心者のうちは、自分のためにも少し丁寧すぎるくらいの書き方を意識すると、後からの自分を助けてくれます。
まとめ|「未来の自分」が読みやすいコードを目指そう
VBAのマクロは、動けばとりあえず仕事が進みます。ですが、後から見返したときに“意味がわからないコード”になってしまっては、逆に手間やストレスが増えてしまうこともあります。
筆者自身も、「なんとなく書いたコードを半年後に自分で読んで理解できない」「似たような処理が複数あって、どこを直せばいいかわからない」といった失敗を何度も経験してきました。
今回紹介した3つのポイント
-
変数名に意味を持たせることで、コードの内容が直感的に理解できる
-
コメントを残すことで、処理の意図を忘れたときにも思い出しやすい
-
処理を別管理して再利用すれば、変更にも強く、無駄がない
VBAは“書き方のルール”が厳しくない分、自由に書けてしまいます。だからこそ、「未来の自分」や「他の担当者」がストレスなく読めるコードを意識するだけで、全体の品質が大きく向上します。
ぜひ今回ご紹介したポイントを意識して、あとから困らない・安心して使えるVBAコードを書いていきましょう。
【関連記事紹介】
職場では仕事の進め方が変更になるなどしてエクセルファイルの仕様変更をせざる終えないこともあるかと思います。
エクセルファイルの保守・管理について以下の記事もご参考ください。