【VBA】行削除を高速化する方法

描画を停止し、まとめて行削除をする

大量の行を削除する場合、処理時間が遅いことがあります。

その場合は、「描画の停止」「行をまとめて削除する」ことで高速化が可能です。

行削除で時間がかかる1番の理由は、1つずつ行を削除する処理だからです。

一般的な書き方に比べ、今回の高速化で処理時間は10分の1以下にはなると思います。

「描画の停止」をするには、処理の前にApplication.ScreenUpdating = Falseと書きます。

その後、すべての処理が終わったらApplication.ScreenUpdating = Trueで描画するように戻せば、実行結果がエクセルに反映されます。

 

「行をまとめて削除する」には、Range変数に削除対象の行をどんどんUnionメソッドで格納し、最後にまとめて行を削除します。

 

コード

サンプルコートは、「社員情報」ブックの「住所」シート1~2000行目で、1行目の値が×の行をすべて削除します。

 

解説

サンプルコードでは、対象のシートをws変数に格納し、格納したシートを処理対象としています。

繰り返し処理の中で、1行目から2000行目を順番にチェックします。

最初に削除対象の行が見つかった時は、deleteRows変数に行を格納し、2件目以降の削除対象の行が見つかった時はUnionメソッドでどんどん格納しています。

UnionメソッドでdeleteRows変数に、つなげていってるイメージです

最後に、削除対象の行があったらEntireRow.Deleteで、行をまとめて一括削除します。

 

EntireRow.Deleteなど行削除の方法については下の記事を見てください。

【VBA】行を削除する

 

(参考)高速化してないコード

高速化せずに、普通に書いたプログラムは次のようになります。

特に処理時間に問題ない時は、この高速化していないこのコードの方が見やすいので、この書き方でOKです。

このコードのように、1行ずつ削除する場合は、後ろの行からループ処理で削除していきます。
詳しい理由は、次の記事を参考にしてください。

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

 

関連記事

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