Excel/VBA

TOP

行挿入・行削除

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

目次

行挿入

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))として条件分岐をする必要があります。

関連記事