Excelでデータを扱っていると、
途中に空白行が混ざっていて処理しづらいことはありませんか?
手作業で削除するのは時間がかかりますし、 行を詰めるたびにズレるのもストレスですよね。
そこで今回は、ExcelVBAで空白行をまとめて削除するマクロをご紹介します。
- 途中に空白があってもOK
- データのある行は削除しない
- 初心者でもそのまま使える
完成イメージ
空白行を一括で削除するマクロ(コピペOK)
以下のコードを標準モジュールに貼り付けてください。
Option Explicit
Sub DeleteBlankRows()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Set ws = ActiveSheet
' A列を基準に最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 下から上に向かってチェック
For r = lastRow To 1 Step -1
' 行全体が空白なら削除
If Application.WorksheetFunction.CountA(ws.Rows(r)) = 0 Then
ws.Rows(r).Delete
End If
Next r
MsgBox "空白行の削除が完了しました。", vbInformation
End Sub
コード解説(初心者向け)
① 下から上にループする理由
For r = lastRow To 1 Step -1
行を削除すると、下の行が繰り上がります。 上から処理すると行番号がズレてしまうため、
必ず「下から上」に処理します。
② 行が完全に空白かどうかを判定
CountA(ws.Rows(r)) = 0
CountA は、 「その行に入力されているセルの数」を返します。
0 の場合は、完全に空白の行という意味になります。
③ A列基準で最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
A列に必ずデータが入っている前提で、 処理範囲を自動的に決めています。
よくある応用パターン
① 特定の列が空白の行だけ削除したい
例えば「A列が空白なら削除」したい場合:
If ws.Cells(r, "A").Value = "" Then
ws.Rows(r).Delete
End If
② 見た目は空白だけど数式が入っている行を削除しない
CountA は数式もカウントします。 数式行を残したい場合は、この判定が安全です。
③ 見た目が空白(””)の行も削除したい場合
次のようにすると、より厳密に判定できます。
If Application.WorksheetFunction.CountA(ws.Rows(r)) = 0 Then
ws.Rows(r).Delete
End If
実行手順
- 削除したいデータがあるシートを開く
- Alt + F11 でVBEを起動
- 「挿入」→「標準モジュール」
- 今回のコードを貼り付け
- Excelに戻り、マクロを実行
これだけで、空白行が一括で削除されます。
まとめ:空白行削除はVBAで一瞬
今回紹介したマクロを使えば、
- 途中に空白があっても安全
- 手作業で削除する必要なし
- 大量データでも一瞬で処理
名簿整理、CSVデータの前処理、 集計前の下準備など、幅広く使えるマクロです。
ぜひ、あなたのExcel作業に取り入れてみてください。


コメント