行を挿入するプログラム
ExcelVBAで行を挿入する方法について見ていきます。
行の挿入には、RangeのInsertメソッドを使用します。
メソッド自体は難しくないのですが、
どこに
何行挿入するか
という指定が必要になってきます。
また、行の順番が変化しますので、繰り返し処理を行う際には注意が必要です。
この点にもスポットを当てて例を挙げます。
一行挿入
現在のシートの3行目に新しい行を追加するには、以下のようにします。
Rows(3).Insert
シートを指定して実行したければ、以下のように書きます。
Worksheets("Sheet1").Rows(3).Insert
基本的な事ですが、図で示した通り、3行目の挿入では、3行目に空白が挿入され、3行目以降は4行目以降にずれるような挙動となります。

色々な書き方
行を挿入する書き方はいくつかあります。
Rows(3).Insert
Range(“3:3”).Insert
Range(“A3”).EntireRow.Insert
Cells(3, 1).EntireRow.Insert
これらは全て3行目に空行を追加するメソッドになります。

複数行挿入
複数行を一度に挿入する事もできます。
3,4行目に空行を挿入するには以下のようにします。
Range(“3:4”).Insert
Range(“A3:A4”).EntireRow.Insert

RowsやCellsでは単体で複数行挿入する書き方はありません。
ただ、数値で指定できるので繰り返し処理で実現する事が可能です。
コピーした行を挿入
コピーした行を挿入するには、先に Copyメソッドでコピーした後 Insertメソッドを使えばそのまま貼り付けられます。
Rows(1).Copy '1行目コピー
Rows(3).Insert '3行目に挿入
Application.CutCopyMode = False ' コピーモード解除
最後にコピーモードを解除するコードを書いておきましょう。

もちろんRows以外の書き方もできます。
以下は1,2行目を4,5行目にコピーして挿入する例です。
Range("A1:A2").EntireRow.Copy
Range("A4").EntireRow.Insert
'Range("A4:A5").EntireRow.Insert
Application.CutCopyMode = False ' コピーモード解除

3行目はコメントアウトしていますが、2行目3行目どちらの書き方をしても同じ結果となります。
挙動としては、コピーされた行数分、挿入の際の行数が確保されるようです。
次の例は、一行分コピーし、複数行挿入した場合の結果です。
Range("A1").EntireRow.Copy
Range("A4:A5").EntireRow.Insert
Application.CutCopyMode = False ' コピーモード解除
この場合は、1行目が4,5行にコピーされて挿入しています。

繰り返し処理のサンプル
行の挿入を繰り返し行う場合、行番号がずれてしまうので上手くいかない事があります。
以下の例のように、最終行を取得して各行の下に3行づつ挿入したい場合、上の行から挿入しようとすると上手くいきません。
これを回避するためには、最終行から上に向かってループすると上手くいきます。
これは行を削除するような処理でも使えますので、覚えておくと便利です。
Sub InsertTest()
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 '逆順
Range(Rows(i + 1), Rows(i + 2)).Insert
Next i
End Sub
