例えば以下の表の
・列「名前」の
・値「佐藤」の行のみ
を…
削除できます!
オートフィルタを利用することで
削除できます!
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
実行結果
オートフィルタを利用して、条件に一致した行のみを削除できました。
※列「名前」の値が「佐藤」の行のみを削除できました。
参考①
オートフィルタを利用して、条件に一致した行ではない行を削除することもできます。
詳細は以下の記事をご確認ください。
参考②
重複行を削除することもできます。
詳細は以下の記事をご確認ください。
参考③
フィルタ関連の記事は他にもあります。
詳細は以下の記事をご確認ください。