Excelのワークシートで不要になった空の行を一括で削除したい場合、VBA(マクロ)を使うと効率的です。
前提条件と注意点
- 実行前に必ずワークシートのバックアップ(保存)を行ってください。
- 行を削除する際は、誤ったデータの削除を防ぐため、事前に削除対象の範囲を確認してください。
空行を削除するVBAマクロ(完全版)
上から順に行を削除すると、行番号が繰り上がって判定が正しく行われなくなるため、このマクロでは下から上に向かって行を走査して削除します。
Sub DeleteEmptyRows()
Dim ws As Worksheet
Dim rng As Range
Dim lastRow As Long
Dim i As Long
Dim isEmptyRow As Boolean
Dim col As Long
Dim lastCol As Long
' アクティブなワークシートを対象とする
Set ws = ActiveSheet
' データの入っている最終行と最終列を取得
On Error Resume Next
lastRow = ws.Cells.Find(What:="*", _
After:=ws.Cells(1, 1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
lastCol = ws.Cells.Find(What:="*", _
After:=ws.Cells(1, 1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
' シートが完全に空の場合の処理
If lastRow = 0 Or lastCol = 0 Then
MsgBox "処理対象のデータが見つかりません。", vbExclamation
Exit Sub
End If
' 画面描画を停止して処理を高速化
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' 下から上に向かって行をチェックし、完全な空行を削除する
For i = lastRow To 1 Step -1
isEmptyRow = True
For col = 1 To lastCol
If Trim(ws.Cells(i, col).Value) <> "" Then
isEmptyRow = False
Exit For
End If
Next col
If isEmptyRow Then
ws.Rows(i).Delete
End If
Next i
' 設定を復元
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "空行の削除が完了しました。", vbInformation
End Sub
使い方と実行手順
1. Excelを開き、Alt + F11 キーを押してVBE(Visual Basic Editor)画面を開きます。
2. メニューの「挿入」から「標準モジュール」を選択します。
3. 開いたモジュールウィンドウに上記のコードを貼り付けます。
4. F5 キーを押すか、マクロの実行から DeleteEmptyRows を選んで実行します。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更上から順に走査すると行削除時にインデックスがずれて判定漏れを起こすVBAコードの不具合を、下から上へ走査する方式へ修正しました。
- 追加マクロの実行手順、前提条件、および注意点に関する説明を追加しました。
