【VBA】空白セルがある行をすべて削除する

空白セルがある行をすべて削除する方法は、「ループ処理で1行ずつチェックしながら削除する方法」と、「SpecialCellsメソッドで空白セルを取得し、一括削除する方法」があります。

 

複雑なロジックも行いたい場合は「ループ処理で1行ずつチェックしながら削除する方法」、処理速度を重視するなら「SpecialCellsメソッドで空白セルを取得し、一括削除する方法」がオススメです。

ループ処理で1行ずつチェックしながら削除する方法

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

空白セルだった場合に、Deleteメソッドでその行を削除します。

コード

サンプルコードでは、1~100行目をチェックし、A列(1列目)の値が空白だった時にその行を削除します。

 

解説

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

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

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

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

 

SpecialCellsメソッドで空白セルを取得し、一括削除する方法

まず、RangeオブジェクトのSpecialCellsメソッドを使って、Rangeで指定した範囲の空白セルを取得します。(SpecialCellsメソッドxlCellTypeBlanksを指定すると、空白セルが取得できます。)

SpecialCellsメソッドは、空白セルや数式が含まれるセルなど特定のセルを取得できる便利なメソッドです。

その後、EntireRow.Deleteでまとめて削除します。

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

コード

サンプルコードでは、1~100行目をチェックし、A列の値が空白だった時にその行を削除します。

 

解説

SpecialCellsで空白セルを取得するのですが、0件の時はエラーが発生します。(そういう仕様なのです)

なので、まず処理前にOn Error Resume Nextと書くことで、エラーを無視するようにします。

その後、deleteRowCells変数に、A列が空白のセルをすべて格納します。

最後にdeleteRowCells.EntireRow.Deleteでまとめて行削除しています。

たとえば、A~C列どこか1箇所でも空白が存在する行を削除したい場合は、空白セルを取得する時の範囲を
Set deleteRowCells = Range(“A1:C100“).SpecialCells(xlCellTypeBlanks)
と変更すればOKです。

 

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

【VBA】行を削除する

 

関連記事

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