VBAコードは「数ヶ月後の自分」や「引き継ぎを受けた後任者」が読むことを前提に書くべきです。変数名・コメント・インデント・Sub分割の4つを意識するだけで、同じ処理でも読みやすさが大きく変わります。
この記事では、次の内容を順番に解説します。
- 読みにくいコードと読みやすいコードのBefore/After
- 意味の伝わる変数名のつけ方
- 効果的なコメントの書き方
- インデントと構造の整え方
- Sub分割で処理をシンプルに保つ方法
読みにくいコードと読みやすいコードの違い
まず同じ処理を「読みにくい書き方」と「読みやすい書き方」で比べてみます。
Before(読みにくい):
For i = 2 To 100
If Cells(i, 3).Value = "未" Then
Cells(i, 5).Value = "対応中"
End If
Next i
何行目まで処理するか・3列目が何の列か・5列目が何の列か、コードを読んだだけでは判断できません。
After(読みやすい):
Sub UpdateStatus()
Dim lastRow As Long
Dim i As Long
Const STATUS_COL As Long = 3 ' ステータス列(C列)
Const RESULT_COL As Long = 5 ' 処理結果列(E列)
' 最終行を動的に取得
lastRow = Cells(Rows.Count, STATUS_COL).End(xlUp).Row
For i = 2 To lastRow
' ステータスが「未」の行だけ処理する
If Cells(i, STATUS_COL).Value = "未" Then
Cells(i, RESULT_COL).Value = "対応中"
End If
Next i
End Sub
変数名・定数・コメントを加えることで「何をしている処理か」が一目でわかるようになります。
意味の伝わる変数名をつけるには?
変数名は「何が入っているか」が名前から読み取れることが理想です。
| 避けるべき変数名 | 改善後の変数名 | 理由 |
|---|---|---|
i | rowIndex または i(ループ変数は慣例でOK) | ループ変数の i は許容範囲 |
x・a | salesAmount・targetSheet | 何が入っているか全くわからない |
data | customerName・invoiceDate | 「データ」では何のデータかわからない |
flag | isProcessed・hasError | True/Falseのフラグはisやhasから始めると意図が明確 |
ws | wsData・wsSummary | 複数シートを扱う場合はどのシートか明示する |
' 変数名の改善例
' Before
Dim ws As Worksheet
Dim n As Long
Set ws = Sheets("Sheet1")
n = ws.Cells(Rows.Count, 1).End(xlUp).Row
' After
Dim wsData As Worksheet
Dim lastRow As Long
Set wsData = Sheets("データ")
lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row
効果的なコメントの書き方
コメントは「すべての行に書く」より「読む人がつまずくポイントに書く」方が効果的です。
コメントが必要な場面:
- 処理の目的・全体の流れを説明する冒頭コメント
- パッと見てわかりにくい条件式の意味
- マジックナンバー(直接書いた数値)の意味
- 例外処理・特殊なケースへの対応
- 後で修正する可能性があるTODO
'==================================
' Sub名 :ExportReport
' 処理内容:月次レポートをPDFで出力する
' 引数 :なし
' 更新日 :2025/06/01
'==================================
Sub ExportReport()
Dim ws As Worksheet
Dim pdfPath As String
Set ws = ThisWorkbook.Sheets("レポート")
' 出力先パス(マクロファイルと同じフォルダに保存)
pdfPath = ThisWorkbook.Path & "\report_" & Format(Date, "yyyymmdd") & ".pdf"
' 印刷範囲を設定してPDF出力
ws.PageSetup.PrintArea = "A1:H50"
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
MsgBox "PDF出力が完了しました。" & vbCrLf & pdfPath
End Sub
コメントを書く必要がない場面:コード自体で意図が明確な場合は書かない方がすっきりします。
' 不要なコメントの例
Cells(1, 1).Value = "売上" ' A1セルに「売上」と入力する ← コードを読めばわかるので不要
インデントと構造を整えるには?
インデントが崩れたコードは、構造が見えにくくなります。VBEでは Tab でインデント追加、Shift+Tab で解除できます。
インデントが崩れた例(読みにくい):
For i = 2 To lastRow
If Cells(i, 1).Value <> "" Then
If Cells(i, 2).Value = "完了" Then
Cells(i, 3).Value = "済"
End If
End If
Next i
インデントが整った例(読みやすい):
For i = 2 To lastRow
If Cells(i, 1).Value <> "" Then
If Cells(i, 2).Value = "完了" Then
Cells(i, 3).Value = "済"
End If
End If
Next i
また、処理のかたまりの間に空行を入れると、セクションが見えやすくなります。
Sub分割で処理をシンプルに保つには?
1つのSubが長くなると読みにくくなります。処理の役割ごとにSubを分けて Call で呼び出すと、各Subがシンプルに保たれます。
' 分割前(1つのSubに全部書いている)
Sub ProcessAll()
' ① 準備処理(20行)
' ② データチェック(30行)
' ③ 集計処理(40行)
' ④ 出力処理(25行)
End Sub
' 分割後(役割ごとに分けて呼び出す)
Sub ProcessAll()
Call PrepareProcess ' ① 準備
Call CheckData ' ② チェック
Call CalcSummary ' ③ 集計
Call ExportResult ' ④ 出力
MsgBox "処理が完了しました。"
End Sub
Sub PrepareProcess()
' 準備処理の中身
End Sub
Sub CheckData()
' チェック処理の中身
End Sub
このようにすると「ProcessAllを読めば全体の流れがわかる」構造になり、詳細は各Subを見れば確認できます。
まとめ
- 読まれる前提で書く:数ヶ月後の自分・チームメンバー・引き継ぎ者が読むことを意識する。
- 変数名:「何が入っているか」が名前から読み取れるようにする。
- コメント:全行に書かず「読む人がつまずくポイント」と「処理の目的」に絞る。
- インデント:構造を見やすくするために必ずそろえる。処理のかたまりの間に空行を入れる。
- Sub分割:1つのSubが長くなったら役割ごとに分けてCallで呼び出す。
よくある質問
コメントはどのくらいの量が適切ですか?
目安は「コードの行数の20〜30%程度」ですが、量より質が大切です。「このコードを初めて見る人が迷いそうな箇所」にコメントを入れる意識が最も効果的です。全行にコメントを書くと、逆にコードが読みにくくなることがあります。
英語の変数名と日本語のコメントはどちらがいいですか?
変数名は英語、コメントは日本語が一般的で実務的です。変数名を日本語にすることも技術的には可能ですが、全角文字の入力ミスやVBAエディタでの表示の問題が起きやすいため、英語(または英語+数字)が推奨されます。
Sub分割するとき、共通処理と個別処理の分け方がわかりません。
「複数のSubから同じコードが出てくる」か「1つのSubの中で処理の性格が変わる」かが分け時のサインです。例えば「処理前の準備(ScreenUpdating停止など)」は必ず共通処理として独立させ、「チェック」「集計」「出力」のように処理の役割で分けるのが基本です。
コードを整理する時間が取れません。動けばいいという考えではダメですか?
1回限りで使い捨てのマクロであれば「動けばOK」で問題ありません。ただし「定期的に使う」「他人も触る」「6ヶ月後に自分が修正する」マクロであれば、整理に投資した時間は後で必ず回収できます。最低限「変数名を意味のあるものにする」だけでも大きく変わります。
コードレビューをしてもらえる環境がありません。どうやって品質を上げればいいですか?
「1週間後の自分がこのコードを読んで意味がわかるか?」と自問しながらコードを書く習慣をつけましょう。書いた直後は「当然わかる」と思えても、時間が経つと意外と読めなくなります。書き終わったら一度VBEを閉じて、翌日改めてコードを開いて読んでみるのも効果的です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



