ピボット用の下準備(空行除去)
ピボットテーブルを作る前に「空行が混じっていると正しく集計できない」ことがよくあります。そこで、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を使うと、空行がなくなった表全体を自動で選べる。

