【VBA】オートフィルタで抽出した行以外の行を削除する

例えば以下の表の
 ・列「名前」の
 ・値「佐藤」ではない
を…

列「名前」が「佐藤」ではない行は6行ある
列「名前」が「佐藤」ではない行は6行ある


削除できます!

列「名前」が「佐藤」ではない行が削除された
列「名前」が「佐藤」ではない行が削除された

オートフィルタを利用することで
削除できます!

PR

VBAコード

ここでは例として、
 ・シート「sample」のセル「B2」から続く一連の範囲の表の
 ・列「名前」の値が「佐藤」ではない行のみを
 ・削除
します。

実行前
実行前
Option Explicit

Sub sample()
    
    Dim targetRange As range
    Dim unDeleteRange As range
    Dim deleteRange As range
    
    'オートフィルタを設定する表の一番左上のセルを設定
    Set targetRange = Worksheets("sample").range("B2")
    
    'オートフィルタの設定と表の1列目「名前」を文字列「佐藤」で絞り込み
    targetRange.AutoFilter field:=1, Criteria1:="佐藤"
    
    '絞り込まれた範囲(=削除させない範囲)を取得
    With targetRange.CurrentRegion
        Set unDeleteRange = .Resize(.Rows.Count - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible)
    End With
    
    'オートフィルタを解除
    targetRange.AutoFilter
    
    '絞り込まれた範囲(=削除させない範囲)を非表示
    unDeleteRange.EntireRow.Hidden = True
    
    '表示されている範囲を削除
    With targetRange.CurrentRegion
        Set deleteRange = .Resize(.Rows.Count - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible)
        deleteRange.EntireRow.Delete
    End With
    
    '絞り込まれた範囲(=削除させない範囲)を表示
    unDeleteRange.EntireRow.Hidden = False

End Sub

オートフィルタにより、条件に一致した行のみを絞り込みます(13行目)。
※上記では「佐藤」で絞り込んでいます(=表示させています)。

「絞り込まれた範囲(=削除させない範囲)」を取得します(16~18行目)。
※上記では「佐藤」の行です。

オートフィルタを解除します(21行目)。

「絞り込まれた(=削除させない範囲)」を非表示にします(24行目)。
※上記では「佐藤」の行です。

「表示されている範囲」を削除します(27~30行目)。
※上記では「佐藤」ではない行です。

「絞り込まれた範囲(=削除させない範囲)」を表示します(33行目)。
※上記では「佐藤」の行です。

PR

実行結果

オートフィルタを利用して、条件に一致した行ではない行を削除できました。

実行結果
実行結果
PR

参考①

オートフィルタを利用して、条件に一致した行のみを削除することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

重複行を削除することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

オートフィルタ関連の記事は他にもあります。

詳細は以下の記事をご確認ください。

【VBA】オートフィルタで抽出したデータを、別シートへコピーする
【VBA】オートフィルタで抽出した行以外の行を削除する
【VBA】オートフィルタで抽出した行を削除する
【VBA】オートフィルタを設定し、複数の列で絞り込む
【VBA】オートフィルタを設定し、日付で絞り込む
【VBA】オートフィルタを設定し、文字色で絞り込む
【VBA】オートフィルタを設定し、ワイルドカードを使用して条件を絞り込む
【VBA】オートフィルタを設定し、セルの背景色で絞り込む
【VBA】オートフィルタの条件をクリアして、全てのデータを表示する
【VBA】オートフィルタを設定し、1つの列に複数の条件で絞り込む
【VBA】オートフィルタを設定し空白で絞り込む
【VBA】オートフィルタを設定し絞り込み(数値)をして、絞り込んだ結果の件数を取得する
【VBA】オートフィルタを設定し絞り込み(文字列)をして、絞り込んだ結果の数値の合計を取得する
【VBA】オートフィルタの設定/解除をする
タイトルとURLをコピーしました