VBAのインデントを一括で整える方法|VBAエディタでの字下げ操作と自動整形

Excel・VBA

引き継いだ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ツール

Microsoft Excel、Microsoft Office、Visual Basic は Microsoft Corporation の商標です。

マクロ全体の中身を把握したい方へ
ココナラで作業をお受けしています(筆者のサービスです)。→ 引き継いだExcelマクロを解析し、仕様書にします(ココナラ)

コメント

タイトルとURLをコピーしました