例えば以下の表の
・列「名前」の
・値「佐藤」ではない行
を…
削除できます!
オートフィルタを利用することで
削除できます!
VBAコード
ここでは例として、
・シート「sample」のセル「B2」から続く一連の範囲の表の
・列「名前」の値が「佐藤」ではない行のみを
・削除
します。
※「佐藤」の行のみしか無い場合は何もしません。
Sub sample()
Dim ws As Worksheet
Dim startRange As Range
Dim filterColumnName As String
Dim filterStr As String
Dim table As ListObject
Dim rowCount As Long
'対象シート
Set ws = Worksheets("sample")
'テーブル化する表の一番左上のセル
Set startRange = ws.Range("B2")
'フィルタ対象の列名
filterColumnName = "名前"
'対象文字列
filterStr = "佐藤"
'表をテーブル化してListObjectを取得
Set table = ws.listObjects.Add(Source:=startRange.CurrentRegion, XlListObjectHasHeaders:=xlYes)
'「フィルタ対象の列名」に「対象文字列以外」の行(削除対象の行)の行数を取得
rowCount = WorksheetFunction.CountIf(table.ListColumns(filterColumnName).DataBodyRange, "<>" & filterStr)
'0行でない場合のみ後続の処理を実施
If (rowCount <> 0) Then
'「フィルタ対象の列」にて「対象文字列」で絞り込み
startRange.AutoFilter field:=table.ListColumns(filterColumnName).Index, Criteria1:="<>" & filterStr
'絞り込んだ行(=表示させた行)のみを削除
Application.DisplayAlerts = False
table.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
End If
'テーブル化を解除
With table
.TableStyle = ""
.Unlist
End With
End Sub
実行結果
オートフィルタを利用して、条件に一致した行ではない行を削除できました。
※列「名前」の値が「佐藤」ではない行のみを削除できました。
参考①
オートフィルタを利用して、条件に一致した行のみを削除することもできます。
詳細は以下の記事をご確認ください。
参考②
重複行を削除することもできます。
詳細は以下の記事をご確認ください。
参考③
オートフィルタを使用せずに、特定の行以外の行を削除することもできます。
詳細は以下の記事をご確認ください。
参考④
オートフィルタ関連の記事は他にもあります。
詳細は以下の記事をご確認ください。