【VBA】行を削除する方法(下から削除するのがコツ)
今回はVBAで行を削除する方法を紹介します。
Excelには色々な機能が存在しますが、一括で行を削除する方法はありません。
(行を非表示にする方法はあります)
そのため、一気に行を削除したい場合はVBA(マクロ)の使用がおすすめです。
ただし、行の削除では1つ気を付ける必要があるので併せて覚えてみてください。
行を削除する方法
例えば、このようなデータがあったとします。
そして、B列に「削除」と書かれている行を削除したいとします。
Sub Delete_Rows()
''' B列が「削除」の行を削除
Dim ws As Worksheet
Dim lastRow As Long
Dim row_i As Long
' アクティブシートを対象に設定
Set ws = ActiveSheet
' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
' 一番下の行からループして削除を実行
For row_i = lastRow To 1 Step -1
If ws.Cells(row_i, 2).Value = "削除" Then
ws.Rows(row_i).Delete
End If
Next
End Sub
そうした場合、このコードを実行するとB列に「削除」と書かれた行を一気に削除することができます。
If ws.Cells(row_i, 2).Value = "削除" Then
ws.Rows(row_i).Delete
End If
シートの設定や最終行の取得などがありますが、実際に行を削除しているのはこの部分です。
ここで、B列が「削除」であれば、行の削除(Delete)を行っています。
下から削除するのがコツ
' 一番下の行からループして削除を実行
For row_i = lastRow To 1 Step -1
If ws.Cells(row_i, 2).Value = "削除" Then
ws.Rows(row_i).Delete
End If
Next
行を削除するときに1つ気を付けて欲しいことがあります。
それは下の行から削除することです。
行の削除では、Forループを使っているのですが、Step -1とすることで行の数字を1つずつ小さくしています。
最終行(lastRow)から1行目まで順番にループさせています。
行を削除すると、削除した行の分だけ行数がずれていってしまいます。
そのため、上から順にループを回していくと行数がずれていって、本来削除するはずの行が残ることがあります。
このように「削除」が連続しているときに、上から削除していくと削除が残ってしまいます。
そのため、行を削除するときは一番下の行からループさせるようにしてください。