Home » ExcelVBA Rangeオブジェクト » 行・列を表すRange » 条件に合致した行を削除するExcelマクロ

条件に合致した行を削除するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「excel マクロ 条件 行 削除」
「マクロ 行の削除 ある値の時」
「vba 条件 行 削除 ワイルドカード」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

条件を指定して、合致した行を削除するマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。

[スポンサードリンク]

ワイルドカードを使って条件を指定して行を削除するサンプルマクロ

ワイルドカードを使って条件を指定して、合致した行を削除する簡単なExcelマクロをご紹介しておきましょう。

下図のようなデータがあったときに、

条件に合致した行を削除するマクロ

都道府県が「東京」「東京都」「大阪」「大阪府」の行を削除するマクロです。

なお、A列の姓は必ず何らかのデータが入っているものとします。

Sub 条件に一致した行を削除する()
 Dim i As Long

 For i = Range("A1").End(xlDown).Row To 2 Step -1
 With Cells(i, "G")
  If _
  .Value Like "東京*" Or _
  .Value Like "大阪*" Then
   .EntireRow.Delete
  End If
 End With
 Next i
End Sub

A列の一番下のデータから上方向に向かってループを回して、
 For i = Range("A1").End(xlDown).Row To 2 Step -1

もしも、G列のデータが「東京」か「大阪」で始まっていたら、
 With Cells(i, "G")
  If _
  .Value Like "東京*" Or _
  .Value Like "大阪*" Then

その行全体を削除しています。
   .EntireRow.Delete

サンプルマクロの解説

上記のマクロは、A列に必ずデータが入っているという条件にしているので、「Range("A1").End(xlDown).Row」というコードでA列の一番下の行番号を取得しています。

もしA列に空白セルが存在する可能性があるのなら「Cells(Rows.Count, 1).End(xlUp).Row」というコードにしましょう。

削除系のループでは、後から前に向かってループを回すのが定番の処理です。

納得できない方は、
 For i = 2 To Range("A1").End(xlDown).Row Step 1
と前からループを回したときに、上手く削除できないことをご確認ください。

条件の指定で、Or条件を指定するためのOr演算子と、あいまい条件にするためにLike演算子とワイルドカード「*」を使っています。
  If _
  .Value Like "東京*" Or _
  .Value Like "大阪*" Then

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 行・列を表すRange » 条件に合致した行を削除するExcelマクロ

「行・列を表すRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.