更新日:、 作成日:
VBA セルを挿入する (Range.Insert)
はじめに
Excel VBA マクロでセルを挿入する方法を紹介します。
Range("B1").Insert または Cells(1, 2).Insert メソッドから、セル「B1」に挿入できます。
先に Copy メソッドから、セルをコピーすると、コピーしたセルを挿入できます。
挿入後に移動する方向を指定できます。
セルを挿入する
Range の引数にセル名を指定すると、そのセルに挿入できます。
セル「A1」に挿入するには Range("A1").Insert を入力します。
Range("A1").Insert

Cells の引数にセルの行と列の番号を指定すると、そのセルに挿入できます。
行「2」、列「A」に挿入するには Cells(2, 1).Insert を入力します。
Cells(1, 1).Insert ' A1
Cells(2, 1).Insert ' A2
Cells(1, 2).Insert ' B1
Cells(2, 2).Insert ' B2
挿入後にセルを移動する方向を引数で指定できます。また挿入したセルに形式をコピーする方向のセルも指定できます。
Call Range("B2").Insert(xlShiftDown, xlFormatFromLeftOrAbove) ' 下へシフト、上「B1」から形式をコピー
Call Range("B2").Insert(xlShiftDown, xlFormatFromRightOrBelow) ' 下へシフト、下「(元) B2」から形式をコピー
Call Range("B2").Insert(xlShiftToRight, xlFormatFromLeftOrAbove) ' 右へシフト、左「A2」から形式をコピー
Call Range("B2").Insert(xlShiftToRight, xlFormatFromRightOrBelow) ' 右へシフト、右「(元) B2」から形式をコピー
第 1 引数には次のものがあります。
定数名 | 値 | 説明 |
xlShiftDown (既定) | -4121 | 下方向へシフト |
xlShiftToRight | -4161 | 右方向へシフト |
第 2 引数には次のものがあります。
定数名 | 値 | 説明 |
xlFormatFromLeftOrAbove (既定) | 0 | xlShiftDown なら上 xlShiftToRight なら左のセルから形式をコピー |
xlFormatFromRightOrBelow | 1 | xlShiftDown なら下 xlShiftToRight なら右のセルから形式をコピー |
コピーしたセルを挿入
コピーしたセルを挿入するには、先に Copy メソッドからセルをコピーします。それから挿入します。
Range("A1").Copy ' A1 をコピー
Call Range("B2").Insert(xlShiftDown) ' A1 を挿入して下へシフト
Call Range("B2").Insert(xlShiftToRight) ' A1 を挿入して右へシフト
Application.CutCopyMode = False ' コピーモードを解除
コピーしたセルを挿入したときは、コピー元のセルの形式がコピーされます。
Application.CutCopyMode に False を設定しているのは、Copy メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。

スポンサーリンク
セルの範囲に挿入する
セルの範囲「A1」~「B2」に挿入するには Range("A1:B2").Insert または Range("A1", "B2").Insert を入力します。
Range("A1:B2").Insert
Range("A1", "B2").Insert

引数を指定しないで挿入したときの移動する方向は、範囲が縦長のときは右方向へ、それ以外のときは下方向へ移動します。
コピーしたセルを挿入
Range("A1:B2").Copy ' A1 ~ B2 をコピー
Call Range("C3").Insert(xlShiftDown) ' 下へシフト
' A1 → C3 に挿入
' A2 → C4 に挿入
' B1 → D3 に挿入
' B2 → D4 に挿入
Range("A1").Copy ' A1 をコピー
Call Range("C3:D4").Insert(xlShiftToRight) ' 右へシフト
' A1 → C3 に挿入
' A1 → C4 に挿入
' A1 → D3 に挿入
' A1 → D4 に挿入
Application.CutCopyMode = False ' コピーモードを解除
別シートのセルに挿入する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

' Sheet1 のセル「A1」に挿入
Worksheets("Sheet1").Range("A1").Insert
Worksheets(1).Range("A1").Insert
' Sheet2 のセル「A1」に挿入
Worksheets("Sheet2").Range("A1").Insert
Worksheets(2).Range("A1").Insert
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
スポンサーリンク