【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行目でオートフィルタを利用して絞り込みます(=表示させます)。
※上記では「佐藤」で絞り込んでいます(=表示させています)。

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

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

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

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

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

PR

実行結果

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

実行結果
実行結果
PR

参考

オートフィルタを利用して、条件に一致した行のみを削除する方法は、以下の記事をご確認ください。

タイトルとURLをコピーしました