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

ループ処理で、右側の列から1列ずつ判定し削除する

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

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

 

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

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

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

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

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

 

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

 

コード

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

 

解説

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

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

列削除の基本や、その他の応用テクニックは下の記事を見てください。
【VBA】列を削除する(1列だけ、連続した複数列、離れた複数列)

 

関連記事

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