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

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

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

これ、どうぞ。コピペして使ってください。
メッチャ速く削除できますよ。
結論:高速削除が可能な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を使った削除、どれだけ処理速度が違うのか?
速度の違いを↓の動画でご確認ください!
下記の条件で比較しています。
コード | ファイルサイズ | 削除対象行 | 行数 | 列数 | 処理速度 |
---|---|---|---|---|---|
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でまとめて削除することで作業時間が大幅に削減されます。
アナタが行削除の速度に悩んでいるのなら、是非使ってみてくださいね。
どんどん時間を浮かして、自分で使える時間を増やしていきましょう!
コメント
ありがとうございます。大変助かりました!
お力になれてなによりです!