空白行を削除する|Excel VBA

セル操作関連のテクニック

空白行を削除する

(Excel 2000/2002/2003/2007/2010)

次のマクロは、使用セル範囲から空白行を削除します。
使用セル範囲の各行について行内のセルが空白かどうかをチェックし、すべてのセルが空白セルだったら変数Targetに結合して、最後に一括して削除します。
セルに表示形式や書式が設定されていても、値や数式が入力されていなければ空白セルとみなします。

Sub Sample()
    Dim r As Long, c As Long
    Dim Target As Range

    With ActiveSheet.UsedRange
        For r = 1 To .Rows.Count
            '行内に空白セルがあるかどうかをチェック
            For c = 1 To .Columns.Count
                If Not IsEmpty(.Cells(r, c).Value) Then Exit For '---(1)
            Next c
            
            '行内のすべてのセルが空白だったら、変数Targetに結合
            If c = .Columns.Count + 1 Then
                If Target Is Nothing Then
                    Set Target = .Rows(r).EntireRow
                Else
                    Set Target = Union(Target, .Rows(r).EntireRow)
                End If
            End If
        Next r
    End With
    
    '削除対象の行があれば削除する
    If Not Target Is Nothing Then
        Target.Delete
    End If
End Sub

Sample1は、セルの表示が空白でも、数式が入力されている場合は空白セルとみなしません。
数式の結果が長さ0の文字列「""」のときにも削除するには、(1)のコードを次のように変更してください。

If Len(.Cells(r, c).Value) <> 0 Then Exit For