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.5MB450行5000行200列0秒
Union未使用コード2.5MB450行5000行200列5秒

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

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

 

Unionが高速な理由

 

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

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

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

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

 

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

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

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

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

コメント

  1. 都内SE より:

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