VBA セルを挿入する (Range.Insert)

はじめに

Excel VBA マクロでセルを挿入する方法を紹介します。

Range("B1").Insert または Cells(1, 2).Insert メソッドから、セル「B1」に挿入できます。

先に Copy メソッドから、セルをコピーすると、コピーしたセルを挿入できます。

挿入後に移動する方向を指定できます。

セルをコピーするには「セルをコピーする」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • セルを挿入する
    • セルの範囲に挿入する
    • 別シートのセルに挿入する

セルを挿入する

Range の引数にセル名を指定すると、そのセルに挿入できます。

セル「A1」に挿入するには Range("A1").Insert を入力します。

Range("A1").Insert
1

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 (既定)0xlShiftDown なら上 xlShiftToRight なら左のセルから形式をコピー
xlFormatFromRightOrBelow1xlShiftDown なら下 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 メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。

2

セルの範囲に挿入する

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

Range("A1:B2").Insert
Range("A1", "B2").Insert
3

引数を指定しないで挿入したときの移動する方向は、範囲が縦長のときは右方向へ、それ以外のときは下方向へ移動します。

コピーしたセルを挿入

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
' 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 = "アクティブ"