行の挿入

中級VBA

行を挿入するプログラム

 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
タイトルとURLをコピーしました