📊 Excel VBA Top100
🔄

DeleteEmptyRows

データ処理

アクティブシートの空行をすべて削除します

シート内に散在する空白行を一括検出して自動削除するマクロです。インポートしたデータや手入力データによく含まれる不要な空行を取り除き、データの連続性を確保します。手動での空行削除は行を一つずつ選択して削除する必要がありますが、このマクロなら数百行のデータでも瞬時に処理が完了します。削除後はデータが詰められて整然としたリストになるため、後続の集計や印刷処理がスムーズになります。行の判定には行全体が完全に空かどうかのチェックを用いるため、一部の列だけ空欄の行が誤って消える心配はありません。削除は下の行から上へ向かって処理する定石の実装で、行番号のずれによる削除漏れも起きません。印刷前の整形・ピボットテーブルのソース整備・CSV出力前のクリーニングなど、「仕上げ」の工程で使う定番マクロです。同じデータ整形系のNormalizeDataやRemoveDuplicatesと組み合わせて使うことで、インポート直後の乱れたデータを一気にクリーンな状態へ整えられます。

DeleteEmptyRows デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: DeleteEmptyRows を実行すると、シート内の空行が削除されます

🎯 活用シーン

  • ✓CSVやテキストファイルからインポートしたデータに含まれる空行を一括削除して整理したいとき
  • ✓複数人が入力したシートに混在する不要な空行を取り除いてデータを整形したいとき
  • ✓データ抽出・フィルタリング後に残った空行を削除してリストを詰めたいとき
  • ✓Webからコピーした表データに混ざった空行を除去して、きれいな一覧表に整えたいとき
  • ✓印刷時に不要な空白ページが出る原因となっている中間の空行をまとめて削除したいとき

💡 実装のヒント

  • ▸削除前にバックアップを取ることをお勧めします。削除した空行は元に戻す(Ctrl+Z)で復元できますが、マクロ実行後にファイルを保存すると復元できなくなります。
  • ▸1行おきに空行が入っているような規則的な構造のデータでも、すべての空行を一括削除できます。
  • ▸特定の列だけを基準に空行を判断したい場合は、マクロのコードを一部修正することで対応できます。
  • ▸見た目は空でもスペースだけが入ったセルがある行は「空行」と判定されません。事前にTrimSpacesを実行すると確実です。
  • ▸数万行の大きなシートでも下から上への一括処理で高速に動作します。

💻 VBAコード

' DeleteEmptyRows
' -----------------
' Macro Name: DeleteEmptyRows
' Description: アクティブシートの空行をすべて削除します
' Parameters: なし
' Returns: なし
' Usage: DeleteEmptyRows を実行すると、シート内の空行が削除されます
' -----------------

Sub DeleteEmptyRows()
    On Error GoTo ErrorHandler

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim deletedCount As Long

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    deletedCount = 0

    If lastRow < 1 Then
        MsgBox "データが見つかりません", vbCritical, "エラー"
        Exit Sub
    End If

    For i = lastRow To 1 Step -1
        If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then
            ws.Rows(i).Delete
            deletedCount = deletedCount + 1
        End If
    Next i

    MsgBox deletedCount & " 行の空行を削除しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub