Vba: セル値に基づいて行を削除する方法
VBA で次の構文を使用すると、セル値に基づいて行を削除できます。
Sub DeleteRowsByValue()
Dim ws As Worksheet
Set ws = ActiveSheet
'clear existing filters
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
'filter range where column 2 in range is equal to "East"
ws.Range(" A1:C10 ").AutoFilter Field:=2, Criteria1:=" East "
'delete rows that are visible
Application.DisplayAlerts = False
ws.Range(" A2:C10 ").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
'remove filter
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
End Sub
この特定のマクロは、列 B の値が「Is」に等しい範囲A1:C10内のすべての行を削除します。
このマクロは次の手順を使用します。
- A1:C10にフィルターを適用して、列 B の値が「Is」である行のみを表示します。
- 次に、表示されているセルをすべて削除します。
- 次にフィルターを取り外します。
これにより、列 B の値が「Is」に等しい範囲A1:C10のすべての行が削除されます。
次の例は、この構文を実際に使用する方法を示しています。
例: VBA を使用してセル値に基づいて行を削除する
さまざまなバスケットボール選手に関する情報を含む次のデータセットがあるとします。
Conference 列が「East」に等しいすべての行をデータセットから削除するとします。
これを行うには、次のマクロを作成できます。
Sub DeleteRowsByValue()
Dim ws As Worksheet
Set ws = ActiveSheet
'clear existing filters
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
'filter range where column 2 in range is equal to "East"
ws.Range(" A1:C10 ").AutoFilter Field:=2, Criteria1:=" East "
'delete rows that are visible
Application.DisplayAlerts = False
ws.Range(" A2:C10 ").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
'remove filter
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
End Sub
このマクロを実行すると、次の出力が表示されます。
Conference 列の値が「East」である行はすべて削除されていることに注意してください。
注: Application.DisplayAlerts=False行は、表示されている行を削除するプロセスを表示しないように VBA に指示します。これにより、プロセスが高速化されます。
追加リソース
次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。
VBA: 条件付き書式をセルに適用する方法
VBA: 範囲内の行数をカウントする方法
VBA: 特定のテキストを含むセルを数える方法