Excel/VBA

TOP

空白を判定し、空白行を削除する方法

空白を判定し、空白行を削除または選択する方法の説明画像です

上記のサンプルデータを用いて解説していきます。

空白行を全て選択

まずは、B列のカテゴリが空白の場合、空白行を全て選択する方法を解説します。
空白を判定するには、IF文で『If セル値 = "" Then』とし、セル値が空白(ダブルクォーテーション2つ)だった場合の行を選択します。


サンプルコード


Sub 空白行選択()

    Dim i As Long, LastRow As Long
    Dim rng As Range
    
    'A列で最終行を取得する
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    '2行目から最終行までループ
    For i = 2 To LastRow
        
        'B列のカテゴリが空白の場合、空白行をrngに格納する("" = 空白を表しています)
        If Cells(i, "C").Value = "" Then
            If rng Is Nothing Then
                Set rng = Rows(i)
            Else
                Set rng = Union(rng, Rows(i))
            End If
        End If
        
    Next i
    
    'rngに行が格納されていた場合にのみ空白行を選択
    If Not rng Is Nothing Then
        rng.Select
    End If
    
    'リソースの開放
    Set rng = Nothing
    
    MsgBox "空白行選択完了", vbInformation, "処理終了"
    
End Sub
        

実行結果

空白行を選択することができました。
サンプルコードではRangeオブジェクトの変数(rng)に行を格納していき、最後にrngに格納した行を選択しています。
Rangeオブジェクトに格納する方法は、こちらの記事の行削除の項目で解説しています。

実行結果の画像です

空白行を全て削除

空白行を全て削除するには上記で行った処理で、『rng.Select』の箇所を『rng.Delete』に変更します。

削除前はユーザーに削除してよいかを確認するメッセージボックスを表示させることをお勧めいたします。

サンプルコード


Sub 空白行削除()
    
    '削除前にユーザーに削除処理を行ってよいか確認する
    If MsgBox("空白行の削除を行います" & vbCrLf & "よろしいですか?", vbYesNo + vbQuestion, "空白行削除") = vbNo Then
        'ユーザーが『いいえ』を選択した場合処理を終了
        Exit Sub
    End If
    
    Dim i As Long, LastRow As Long
    Dim rng As Range
    
    'A列で最終行を取得する
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    '2行目から最終行までループ
    For i = 2 To LastRow
        
        'B列のカテゴリが空白の場合、空白行をrngに格納する("" = 空白を表しています)
        If Cells(i, "C").Value = "" Then
            If rng Is Nothing Then
                Set rng = Rows(i)
            Else
                Set rng = Union(rng, Rows(i))
            End If
        End If
        
    Next i
    
    'rngに行が格納されていた場合にのみ空白行を削除
    If Not rng Is Nothing Then
        rng.Delete
    End If
    
    'リソースの開放
    Set rng = Nothing
    
    MsgBox "空白行削除完了", vbInformation, "処理終了"
    
End Sub
        

実行結果

空白行を全て削除することが出来ました。

実行結果の画像です

空白行を判定する際の注意点

空白行を判定する場合、見た目上セルが空白であっても下記の画像のように、セルにスペースが入っているなどして空白とみなされない場合があります。

そういった場合は、下記のサンプルコードのように、『If セル値 = " " Or セル値 = " " Then』とすると、半角スペースと全角スペースの判断が出来るようになります。

しかし、この方法は最初の1文字のみにスペースが入っている場合にのみしか適応されません。状況に応じて入力規則の制限をしたり、更に条件を絞り込んでいく必要があります。

セルにスペースが入っている状態の画像です

サンプルコード


Sub 空白行削除()

    '削除前にユーザーに削除処理を行ってよいか確認する
    If MsgBox("空白行の削除を行います" & vbCrLf & "よろしいですか?", vbYesNo + vbQuestion, "空白行削除") = vbNo Then
        'ユーザーが『いいえ』を選択した場合処理を終了
        Exit Sub
    End If
    
    Dim i As Long, LastRow As Long
    Dim rng As Range
    
    'A列で最終行を取得する
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    '2行目から最終行までループ
    For i = 2 To LastRow
        
        'B列のカテゴリが空白の場合、空白行をrngに格納する("" = 空白を表しています)
        'スペース入っている行も削除しています
        If Cells(i, "C").Value = "" Or Cells(i, "C").Value = " " Or Cells(i, "C").Value = " " Then
            If rng Is Nothing Then
                Set rng = Rows(i)
            Else
                Set rng = Union(rng, Rows(i))
            End If
        End If
        
    Next i
    
    'rngに行が格納されていた場合にのみ空白行を削除
    If Not rng Is Nothing Then
        rng.Delete
    End If
    
    'リソースの開放
    Set rng = Nothing
    
    MsgBox "空白行削除完了", vbInformation, "処理終了"
    
End Sub