Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Insert

Excel VBA VBA
スポンサーリンク

Insert は「セル・行・列を“押し広げて”新しいスペースを作る動き」

まずイメージから。
Insert は「今あるセルや行・列をズラして、新しいセル/行/列の“空きスペース”を差し込む」動きです。

手作業だと、

行番号を右クリック →「挿入」
列見出しを右クリック →「挿入」
セルを右クリック →「挿入」→「下にシフト/右にシフト」

これを VBA でやるときに登場するのが Range.Insert です。

ポイントは、

どの範囲を基準に挿入するか(Range)
どの方向に押し広げるか(Shift)
行ごと・列ごとに挿入するか(EntireRow / EntireColumn)

この3つを整理しておくことです。


一番基本:行を挿入する(EntireRow.Insert)

5行目のところに「1行」挿入する

Sub SampleInsertRow()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Rows(5).Insert

End Sub
VB

これだけで、

元の5行目が6行目にズレる
元の6行目が7行目にズレる
…というように、5行目の位置に「空の1行」が差し込まれます。

より明示的に書くなら、こうです。

ws.Rows(5).EntireRow.Insert
VB

Rows(5)Rows(5).EntireRow も、ここではほぼ同じ意味です。
「この行を“行として”挿入の基準にする」というイメージで捉えてください。

複数行をまとめて挿入する

Sub SampleInsertMultiRows()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力")

    ' 5行目の位置に、3行分の空行を挿入
    ws.Rows("5:7").Insert

End Sub
VB

「5:7」と指定すると、「3行分のスペースをここに差し込む」という意味になります。
元の5行目以降が、まとめて下にズレます。


列を挿入する(EntireColumn.Insert)

C列の位置に新しい列を1列挿入する

Sub SampleInsertColumn()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Columns("C").Insert

End Sub
VB

これで、

元の C列が D列にズレる
元の D列が E列にズレる

というように、C列の位置に新しい空の列が差し込まれます。

複数列も同じです。

ws.Columns("C:E").Insert   ' C~E の位置に3列分の空列を挿入
VB

セル単位で Insert する(Shift で“押し出す方向”を決める)

A5 のセルを基準に「下にシフト」して1セル挿入

Sub SampleInsertCellDown()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A5").Insert Shift:=xlShiftDown

End Sub
VB

これは、手作業で「セルを挿入 → 下にシフト」を選んだのと同じです。

A5 に新しいセルが入り、
元の A5 の値は A6 に、A6 は A7 に…と下にズレていきます。
同じ列の下方向だけが押し広げられるイメージです。

A5 のセルを基準に「右にシフト」して1セル挿入

Sub SampleInsertCellRight()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A5").Insert Shift:=xlShiftToRight

End Sub
VB

今度は、行方向に押し広げます。

A5 に新しいセルが入り、
元の A5 の値は B5 に、B5 は C5 に…と右にズレていきます。
同じ行の右方向だけが押し広げられるイメージです。


Insert を使うときに絶対意識してほしいこと

「何を基準に、どこを押し広げるか」を常に言葉で説明できるようにする

Insert は、慣れないうちは「どこが動くのか」が分かりにくくなりがちです。
コードを書くとき、必ず自分にこう説明してみてください。

この行(または列・セル)を基準に
上から下(または左から右)に向かって
どの範囲を押し広げたいのか

例えば、

ws.Rows(5).Insert
VB

なら、

「5行目の位置に1行挿入して、5行目以降を全部下にズラす」

と説明できますよね。

ws.Range("A5").Insert Shift:=xlShiftToRight
VB

なら、

「A5 に1セル挿入して、その行の A5 以降を右にズラす」

と説明できます。

この「日本語で説明できるか」を毎回チェックすると、
Insert の“暴発”をかなり防げます。

「どのシートの、どの行/列/セルか」を毎回はっきり書く

避けたい書き方の例です。

Rows(5).Insert
Columns("C").Insert
Range("A5").Insert Shift:=xlShiftDown
VB

これは「アクティブなシート」を前提にしているので、
シートが変わると、全く別の場所に行や列を挿入してしまう危険があります。

超初心者のうちから、あえてこう書く癖をつけてください。

ThisWorkbook.Worksheets("入力").Rows(5).Insert
ThisWorkbook.Worksheets("入力").Columns("C").Insert
ThisWorkbook.Worksheets("入力").Range("A5").Insert Shift:=xlShiftDown
VB

あるいは変数を使って:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("入力")

ws.Rows(5).Insert
ws.Columns("C").Insert
ws.Range("A5").Insert Shift:=xlShiftDown
VB

「どのブック → どのシート → どの行/列/セル → どう押し広げるか」
という順番を崩さない書き方は、Insert でもかなり効いてきます。


まとめ:Insert は「既存データをズラして、新しいスペースを差し込むためのメソッド」

Insert の本質は、

「指定した行・列・セルを基準に、周りのセルを下または右に押し広げて、新しい空きスペースを作る」

ことです。

押さえておきたいポイントをコンパクトにまとめると、

行を挿入 → Rows(n).Insert(EntireRow.Insert)
列を挿入 → Columns("C").Insert(EntireColumn.Insert)
セル単位 → Range("A5").Insert Shift:=xlShiftDown / xlShiftToRight
「どこを基準に、どの方向へ押し広げるか」を日本語で説明できるようにしておく

タイトルとURLをコピーしました