Excel VBA 逆引き集 | ピボット用の下準備(空行除去)

Excel VBA
スポンサーリンク

ピボット用の下準備(空行除去)

ピボットテーブルを作る前に「空行が混じっていると正しく集計できない」ことがよくあります。そこで、VBAで 空行を検出して削除する処理 を入れておくと、ピボット作成がスムーズになります。初心者向けに最短コードから応用例まで整理しました。


基本:空行を削除する(単純版)

Sub RemoveBlankRows_Basic()
    Dim last As Long, r As Long
    'A列を基準に最終行を取得
    last = Cells(Rows.Count, "A").End(xlUp).Row

    '下から上へループ(削除は下からが安全)
    For r = last To 2 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 Then
            Rows(r).Delete
        End If
    Next
End Sub
VB
  • ポイント:
    • CountA(Rows(r)) で「その行に値があるか」を判定。
    • 空行なら削除。
    • 下から上へループするのは、削除で行番号がずれるのを防ぐため。

応用:特定列だけを基準に空行判定

Sub RemoveBlankRows_ByColumn()
    Dim last As Long, r As Long
    last = Cells(Rows.Count, "A").End(xlUp).Row

    For r = last To 2 Step -1
        If Cells(r, "A").Value = "" Then
            Rows(r).Delete
        End If
    Next
End Sub
VB
  • ポイント:
    • 「必ず埋まる列」(例:キー列)を基準にすると安全。
    • 全列チェックより高速。

高速版:SpecialCells を使う

Sub RemoveBlankRows_SpecialCells()
    Dim rng As Range
    On Error Resume Next
    Set rng = Range("A1").CurrentRegion.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0

    If Not rng Is Nothing Then
        rng.EntireRow.Delete
    End If
End Sub
VB
  • ポイント:
    • SpecialCells(xlCellTypeBlanks) で空白セルを一気に取得。
    • その行をまとめて削除できる。
    • 空白セルがないとエラーになるので、On Error でガード。

例題で練習

例題1:売上表の空行を削除してピボット作成

Sub Example_CleanAndPivot()
    Dim last As Long, r As Long
    last = Cells(Rows.Count, "A").End(xlUp).Row
    For r = last To 2 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 Then
            Rows(r).Delete
        End If
    Next

    'ピボット作成用に範囲を選択
    Range("A1").CurrentRegion.Select
End Sub
VB

例題2:顧客名(B列)が空の行だけ削除

Sub Example_RemoveBlankCustomer()
    Dim last As Long, r As Long
    last = Cells(Rows.Count, "B").End(xlUp).Row
    For r = last To 2 Step -1
        If Cells(r, "B").Value = "" Then
            Rows(r).Delete
        End If
    Next
End Sub
VB

例題3:空行削除後に「データ整備完了」とメッセージ

Sub Example_CleanDataMessage()
    Dim last As Long, r As Long
    last = Cells(Rows.Count, "A").End(xlUp).Row
    For r = last To 2 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 Then
            Rows(r).Delete
        End If
    Next
    MsgBox "空行を削除しました。ピボット作成の準備完了です!"
End Sub
VB

実務の落とし穴と対策

  • 途中の空白セルと空行の違い:
    • 「セルが空」でも他列に値がある場合は削除しないように注意。
    • 必ず「基準列」を決めて判定するのが安全。
  • 大量データでの速度:
    • 1行ずつ削除は遅い。SpecialCells で一括削除すると高速。
  • 見出し行は残す:
    • ループ開始を「2行目」からにして、見出しは削除しない。
  • ピボット範囲の自動取得:
    • Range("A1").CurrentRegion を使うと、空行がなくなった表全体を自動で選べる。
タイトルとURLをコピーしました