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: 特定のテキストを含むセルを数える方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です