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

ループ処理で、1番下の行から1行ずつ判定し削除する

条件に一致する行だけを削除したい時は、ループ処理で1行ずつ判定し削除します

この時の大事なポイントは、先頭の行からではなく、最後の行から順番に処理をすることです。

 

先頭行から行削除がダメな理由

先頭行からループ処理で行削除を行うのがダメな理由は、先頭から行削除を行うと、行削除された行の分だけ行が上に詰まり、処理が何もされない行が発生してしまうからです。

わかりやすいように具体例で説明すると、先頭行から行の判定・削除を行っている時に5行目を削除したとします。

次にプログラムは6行目を判定・削除しようとするのですが、その時6行目にあるのは、プログラム開始時には7行目にあったデータです。(5行目が削除されたので、6行目以降は1行上に詰まってます)

そして、プログラム開始時に6行目にあったデータは5行目に移動してしまっているので、開始時に6行目にあったデータは行削除の判定・削除が行われません。

 

行が削除された分だけ行が上に詰まって、判定されない行が発生するってことです。

 

コード

サンプルコードでは、1~100行で1列目(A列)の値が×だったら、その行を削除します。

 

解説

繰り返し処理のForでは、カウンタ変数iの初期値を100としStep -1としているので、処理を繰り返すごとにカウンタ変数iがマイナス1されていきます。

このカウンタ変数iを使って処理する行を指定しているので、実際の動きとしては100行目、99行目、98行目…1行目と最後の行から順番に判定・削除処理が行われます。

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

【VBA】行を削除する

 

関連記事

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