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

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

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

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

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

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

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

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

 

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

 

コード

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

 

解説

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

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

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

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

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

 

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

【VBA】列を削除する(1列だけ、連続した複数列、離れた複数列)

 

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

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

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

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

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

 

関連記事

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