【Excelマクロ】条件に合う行の削除

Excelマクロ

特定の値が含まれている行を削除する方法

Excelのデータを整理するときに、特定の値が含まれている行を削除する場面はないですか?

例えば、

  • 売上データのうち、キャンセルされた注文のみ削除したい
  • 特定のキーワードを含む行を一括で削除したい
  • エラーや空白値を含む行を削除したい

手作業でフィルタをかけて削除することも可能ですが、データが大量にある場合は時間がかかるので、とても面倒な作業です。

VBAを使えば、一瞬で特定の条件に合う行を削除でき、業務効率を大幅に向上させることができます。

VBAで特定の値を含む行の削除

実際にVBAを考えていくと、次の手順で処理を行えるかと思います。

  1. データ範囲を指定する(行を削除する場合には、最終行を取得するなど)
  2. 特定の値を検索する(空白の行や、特定の文字など)
  3. 該当する行を削除する

次のようなコードを使えば、指定した値を含む行を削除できます。

Sub list_make()

Dim ls_rw As Long

' 最終行を取得
ls_rw = Cells(Rows.Count, 1).End(xlUp).Row

' 後ろから前に繰り返す(前から削除すると行がずれるため)
For i = ls_rw To 1 Step -1
  If Cells(i,1).Value = "キャンセル" Then
      ws.Rows(i).Delete
    End If
Next i

MsgBox "削除完了しました"

End Sub

コードの内容については、コメントにて書いてある通りですが、次のような内容を実行します。

1.最終行を取得する
2.最終行から上に向かって削除する行かを確認し、「キャンセル」と書いていれば行を削除する
※これは上から行うと、行が削除された際に上に移動するので、移動した分、行がずれてしまうから
3.削除が終われば、「削除完了しました」とメッセージを出す

その他の工夫

それ以外にも、IF構文の内容を変更すれば、2つの内容に基づいて削除することもできます。

If Cells(i, 1).Value = "キャンセル" Or Cells(i, 1).Value = "返品" Then

またA列に限らず、B列やC列に指定をすることもできますし、横方向に確認をしていき、列を削除するという方法も取れます。

まとめ

VBAを使うことで、特定の値を含む行を簡単に削除できます。通常の操作でもオートフィルタなどで絞り込みをして削除をすることもできますが、ボタンひとつで削除できるのは、マクロのいいところです。

  • 手作業ではなく、一括でデータを整理できる
  • 条件を変更すれば、様々なケースに応用可能

業務の自動化に役立ててみてください!

コメント