行挿入・行削除

2024年08月17日

行挿入・行削除をする方法の説明画像です

行挿入

VBAで行を挿入するには、Insertとすると行の挿入を行えます。
下記が行を挿入する際の基礎構文です。

Rows(挿入する行番号).Insert


例) 2行目の下に行を挿入する場合 ⇒ Rows(2).Insert


下記のサンプルコードはタイトルの画像の例のように、情報~と書いているセルの下にそれぞれ1行ずつ挿入していく例です。


Sub 行追加()

    Dim LastRow As Long, i As Long

    'A列の最終行を取得する
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row

    '3行目から行挿入を行うと、行番号が変わってしまう為、最終行からループする
    For i = LastRow To 3 Step -1
        Rows(i).Insert
    Next i

End Sub
    

実行結果

一行ずつ行を挿入することができました。

実行結果を表した画像です

For文で上から1行ずつループしていくと、行を挿入するたびにずれが生じてくるため、『For i = LastRow To 3 Step -1』として、最終行から3行目までを逆からループしていく形にします。

もし、挿入する行が10000行など多くある場合は、For i = LastRow To 3 Step -1 ~ Next iまでの間に、『Application.StatusBar = i』と追加すると、進捗状況を表示できます。


進捗状況を表示させた例の画像です


Sub 行追加()

Dim LastRow As Long, i As Long

'A列の最終行を取得する
LastRow = Cells(Rows.Count, "A").End(xlUp).Row

'3行目から行挿入を行うと、行番号が変わってしまう為、最終行からループする
For i = LastRow To 3 Step -1
    
    Rows(i).Insert
    
    '進捗状況を表示します
    Application.StatusBar = i
    DoEvents
    
Next i

'最後に進捗状況の表示を終了させます
Application.StatusBar = False

End Sub
    

行削除

行の削除を行うにはRangeオブジェクトをDeleteとすると行の削除を行えます。 下記が行を削除する際の基礎構文です。

Rows(挿入する行番号).Delete


例) 2行目の行を削除する場合 ⇒ Rows(2).Delete


下記のサンプルコードは上記の行挿入で追加した行を逆に削除していく例です。
下記の例ではUnionを使用して、変数(rng)に削除する行を入れていき、最後にrng.Deleteで削除しています。


Sub 行削除()

Dim rng As Range
Dim LastRow As Long, i As Long

'A列の最終行を取得する
LastRow = Cells(Rows.Count, "A").End(xlUp).Row

'3行目から最終行までループさせる
For i = 3 To LastRow Step 2
    '挿入する行をrngに格納していく
    If rng Is Nothing Then
        Set rng = Rows(i)
    Else
        Set rng = Union(rng, Rows(i))
    End If
Next i

'rngに格納された行を全て削除します
rng.Delete

End Sub
    

実行結果

追加した行を削除することができました

実行結果を表した画像です

Rangeオブジェクトの変数に入れ、最後に一気に行の削除をすることで処理が速くなります。
Rangeオブジェクトは最初Nothingになっているため、サンプルコードのように『If rng Is Nothing Then』として、 Nothingの場合は、Set rng = Rows(i)とし、Nothing出ない場合は、Set rng = Union(rng, Rows(i))として条件分岐をする必要があります。

関連記事

条件に一致する行を取得する方法
『型が一致しません』と突然エラーが発生してしまった場合の対処法
シートをコピーして新規ブックを作成