VBA・Excel 時短!コピペで使える複数行を高速に削除するコード

この記事は約4分で読めます。

vba_複数行の高速削除

 

表の中に不要な行がたくさんある・・・一つ一つ削除するのは面倒だ!

マサヤ
マサヤ

確かに、手作業で消すと時間かかりますよね。

今からコード書くのも面倒だし、短時間で終わらせる方法ないかな~

マサヤ
マサヤ

これ、どうぞ。コピペして使ってください。
メッチャ速く削除できますよ。

 

 

 

結論:高速削除が可能なVBAコードを紹介します!
どうぞコピペしてお使ってください。

 

どうもマサヤです!

大量データの中にある不要な行を削除するシーン・・・・・・ありますよね。
単純に行を削除するだけなら、Range(cell).Deleteで出来ます。
でも、大量データの行を高速に削除するとなると話が変わってきます。

Range(cell).Deleteで大量の行を削除すると、1行ずつ削除するので時間がかかります。
そんなときは「union」を使うと高速に処理ができます。

 

スポンサーリンク

さっそくコードを紹介!どうぞ、コピペしてお使いください!

 

前置き入らないよ~知識あるから、サクッとコードだけ知りたい・・・

そんなアナタと私(忘れた時用)のために、先にコードを紹介します!
適時変更を加えて、お好きに使ってください!

 

Sub Rows_Delete_Fast()
'===============================================================
'複数行の削除 ※高速
'===============================================================
Dim ListLastRow As Long
Dim DeleteRows As Range
Dim ws As Worksheet

'対象シートは適時変更
Set ws = ActiveSheet
'A列を見て最終行を取得 リストがA列以外なら要変更
ListLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

'1行目は見出しとみなし、2行目から探査
For i = 2 To ListLastRow
    'Rangeに削除対象行を格納 ※今回はB列が空白なら削除。
    If IsEmpty(ws.Cells(i, 2)) Then
        '初回のみ
        If DeleteRows Is Nothing Then
            Set DeleteRows = ws.Rows(i).EntireRow
        '2回目以降は追加
        Else
            Set DeleteRows = Union(DeleteRows, ws.Rows(i).EntireRow)
        End If
    End If
Next

'削除対象行が1つでもあれば行削除を実施
If Not DeleteRows Is Nothing Then DeleteRows.Delete

End Sub

 

Unionメソッドはこれだけ速いです!

 

普通の削除とUnionを使った削除、どれだけ処理速度が違うのか?
速度の違いを↓の動画でご確認ください!

 

vba_速度比較

 

下記の条件で比較しています。

コード ファイルサイズ 削除対象行 行数 列数 処理速度
Union使用コード 2.5MB 450行 5000行 200列 0秒
Union未使用コード 2.5MB 450行 5000行 200列 5秒

結果はUnion使用コードのほうが、5秒速い!

ファイルサイズ2.5MBほどでこの速度差です。
ファイルサイズが大きくなれば、より顕著に速度の違いが現れます。
実際、会社のデータを使う際はもっと大きなデータを扱う場合があるでしょう。

 

Unionが高速な理由

 

なぜ、速度差が現れるのか?

Unionを使うコードで内部的に起きていることを表現すると・・・
削除する行をまとめて選択した上で削除している。

Unionを使わないコードを表現すると・・・
削除する行を1行選択して削除を実行。また、削除する行を選択して削除を実行の繰り返し。

実際、手作業で上の動作を比較してみるとよく解ると思います。
明らかに1行ずつ削除するより、先に行をまとめて選択するほうが工数(クリック数)が少なくて済みます。

 

まとめ:Unionの時短で早く仕事が終わる

いかがでしたでしょうか?

Unionでまとめて削除することで作業時間が大幅に削減されます。
アナタが行削除の速度に悩んでいるのなら、是非使ってみてくださいね。

どんどん時間を浮かして、自分で使える時間を増やしていきましょう!

コメント

  1. 都内SE より:

    ありがとうございます。大変助かりました!