引き継いだVBAのコードが、字下げ(インデント)がバラバラで読めない——。If や For の入れ子が深いと、どこからどこまでが1つの処理なのか分からなくなります。
VBAエディタには、Visual Studio のような自動整形の機能がありません。この記事では、手作業で整える方法と、一括で整える方法を紹介します。
※この記事の後半で紹介するツールは、当ブログ(自動化ラボ)の筆者が開発・販売しているものです。
インデントの基本ルール
Sub/Functionの中身は1段下げるIf・For・Do・While・With・Select Caseの中身は1段下げるElse/ElseIfはIfと同じ位置、Caseはその中身より1段上- 行継続(行末の「 _」)の続きの行は1段下げる
整える前
Sub 集計()
Dim i As Long
For i = 2 To 100
If Cells(i, 3).Value > 0 Then
Select Case Cells(i, 2).Value
Case "A"
Cells(i, 5).Value = "優先"
Case Else
Cells(i, 5).Value = "通常"
End Select
End If
Next i
End Sub
整えた後
Sub 集計()
Dim i As Long
For i = 2 To 100
If Cells(i, 3).Value > 0 Then
Select Case Cells(i, 2).Value
Case "A"
Cells(i, 5).Value = "優先"
Case Else
Cells(i, 5).Value = "通常"
End Select
End If
Next i
End Sub
VBAエディタで字下げする操作
- 複数行を選択して Tab で1段下げ、Shift+Tab で1段上げ
- 「表示」→「ツールバー」→「編集」で、「インデント」「インデント解除」ボタンも使える
- 「ツール」→「オプション」→「編集」で、タブ間隔(既定は4)や「自動インデント」(改行時に前の行の字下げを引き継ぐ)を設定できる
ただし、どこまで下げるかは自分で判断する必要があるので、長いコードを手作業で整えるのはかなり大変です。
一括で自動整形する方法
無料の方法としては、オープンソースの VBAエディタ用アドイン「Rubberduck」にインデント機能があります。アドインのインストールが必要なので、会社のパソコンで使えるかは確認が必要です。
インストール不要・ファイルを選ぶだけで済ませたい場合は、「VBA整形くん」が使えます。

- Sub / If / For / Do / With / Select Case などの入れ子に合わせて字下げ
- Else・ElseIf・Case の位置を揃え、行継続の行は1段下げ、エラー処理のラベルは行頭に
- 行末の余分な空白と、連続する空行を整理
- マクロ入りのExcel(.xlsm など)や .bas / .cls / .frm を、フォルダごと一括で整形
- 字下げと空白だけを整え、処理の内容は変えない。元のファイルも変更しない
- Excel不要・アドイン不要・買い切り
整形済みの .bas は、VBAエディタの「ファイルのインポート」で取り込めます。
まとめ
- VBAエディタには自動整形がないので、Tab / Shift+Tab で手作業
- 入れ子のルールを決めておくと読みやすくなる
- 長いコードや大量のファイルは、ツールで一括整形すると早い
あわせて読みたい
ほどき工房のExcelツール
- マクロ書き出しくん(無料):マクロのコードをまとめてファイルに書き出し
- 数式チェックくん:#REF!・外部リンク・直接入力の数値などを一覧に
- VBA整形くん:VBAのインデントを一括で整える
- マクロ解読くん:マクロの仕様書(Excel/Word)を自動作成
- 64bit対応チェックくん:64bit版で動かない書き方を検出
- マクロ比較くん:改修前後のマクロを新旧対照表に
- マクロ棚卸しくん:フォルダ内のマクロを一括調査
Microsoft Excel、Microsoft Office、Visual Basic は Microsoft Corporation の商標です。
マクロ全体の中身を把握したい方へ
ココナラで作業をお受けしています(筆者のサービスです)。→ 引き継いだExcelマクロを解析し、仕様書にします(ココナラ)


コメント