【VBA】特定文字を含む行をすべて削除する

特定文字を含む行をすべて削除する方法は、「InStr関数で調べ削除する方法」と「Findメソッドで対象セルを取得し削除する方法」があります。

 

どちらも1件ずつ処理をするのは変わらないですが、複雑な条件の場合は「InStr関数で調べ削除する方法」の方がコーディングがしやすいです。

InStr関数で調べ削除する方法

削除の対象となる行の範囲を、1行ずつループ処理でチェックします。

特定の文字を含むかはInStr関数を使ってチェックし、含んでいるセルの時にその行を削除します。

InStr関数は、セルに指定した文字が存在する時には1以上の値、存在しない時は0を返します。

 

コード

サンプルコードでは、1~100行目をチェックし、A列(1列目)の値に「2021年」を含んでいた時にその行を削除します。

 

解説

繰り返し処理で、1番下の行(100行目)からしているのが大事なポイントです。

1番最後の行から削除をしないで先頭の行から削除をすると、削除した行が上に詰まり、処理されない行が発生するからです。

もう少し詳しく知りたい場合は、次の記事を参考にしてください。

【VBA】条件に一致する行をまとめて削除する

 

Findメソッドで対象セルを取得し削除する方法

ループ処理の中で、RangeオブジェクトのFindメソッドを使って、Rangeで指定した範囲の中から指定した文字を含むセルを取得します。

この時、名前付き引数で「部分一致(指定した文字を含む)」を意味するLookAt:=xlPartを書きます。

対象となるセルがある間はループ処理で行の削除処理を行い、対象セルがなくなった(見つからなくなった)らループ処理を抜けます。

「完全一致」で検索したい場合は、LookAt:=xlWhole と書きます。

EntireRowは、指定したセル(今回は特定の文字を含むセル)の行全体を取得するので、それに対してDeleteメソッドを使うと行を削除できます。

コード

サンプルコードでは、1~100行目をFindメソッドでチェックし、A列(1列目)の値に「2021年」を含んでいた時にその行を削除します。

 

解説

大事なポイントとしては、繰り返し処理でDo Loopを使っているところです。

終了条件を書かないと無限ループになって処理が終わらないので、終了条件(今回は特定の文字を含むセルがなくなった)を必ず書きましょう。

InStrを使った削除の方が、正直見やすいし安全かなぁと個人的には思います。

 

行削除の基本や、その他の応用テクニックは下の記事を見てください。

【VBA】行を削除する

 

関連記事

VBAテクニック辞典
成果を出す5つのポイント
VBAテクニック辞典
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました