行の削除

中級VBA

VBAで行を削除する方法

 ExcelVBAで行を削除するにはRangeのDeleteメソッドを使用します。
 一度に複数の行を削除する事も可能です。
 
 尚、繰り返し処理で行を削除する場合は、ループを下方向から上方向に向けて回さなければ上手くいきません。

一行削除

 シートの3行目を削除するには以下のようにします。

Rows(3).Delete

 シートを指定して実行したければ、以下のように書きます。

Worksheets("Sheet1").Rows(3).Delete

 基本的な事ですが、行を削除すると下の行が上にシフトします。
 データが失われることになりますが、特にメッセージなどは表示されません。

色々な書き方

 行を削除する書き方はいくつかあります。EntireRowを使えば、そのセルに含まれる行全体を取得できます。

    Rows(3).Delete
    Range("3:3").Delete
    Range("A3").EntireRow.Delete
    Cells(3, 1).EntireRow.Delete

 これらは全て3行目を削除するメソッドになります。

複数行削除

 複数行を一度に削除する事もできます。3,4行目を削除するプログラムは以下のようにします。

    Range("3:4").Delete
    Range("A3:A4").EntireRow.Delete

 指定行(r)から10行分削除したければ以下の様になります。

'5行目から10行分削除する
Sub testRowsDelete()
    Dim r As Long
    r = 5
    Rows(r & ":" & r + 10).Delete
    'Rows("5:15").Delete と同じ
End Sub

 Cellsでは単体で複数行を削除することはできませんが、繰り返し処理で実現する事が可能です。ただし逆順にしないと上手く削除できません。

繰り返し処理のサンプル

 行の項目を見て削除したい行を決めたいような場合、For文とIf文を使って行を削除することになるでしょう。
 この時、上から下にループしてしまうと削除の際、行の順番がずれるので上手くいきません。
 繰り返し処理で行の削除を行うときは、下から上方向にループするようにしましょう。

Sub DeleteTest()
    Dim lastRow As Long
    'A列の最終行を取得
    lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim i As Long
    For i = lastRow To 1 Step -1
        If Cells(i, "A") = "" Then
            Rows(i).Delete
        End If
    Next i
End Sub

 このコードでは、A列で最終列を取得して、途中空白がある場合はその行を削除していきます。
For文で Step -1 として逆順に指定しています。

まとめ

 VBAでシートの行を削除するにはいくつかの書き方があります。
 Cellsでは複数行を直接選択する事はできませんでしたが、行のみの値を取りだしてRowsで処理すれば良いでしょう。ただし、繰返し処理を逆順にしないと思ったように処理できないので覚えておきましょう。

  ・繰返し処理で行を削除する時は逆順で!

タイトルとURLをコピーしました