行を挿入
行の「挿入」は頻出の基本操作。初心者が迷いがちな「どこに挿入されるのか」「複数行」「見た目のコピー」「テーブルへの追加」まで、最短コードと安全テンプレートで整理します。ポイントは Rows.Insert または Range.EntireRow.Insert を使うことです。
基本:1行挿入の最短コード
Sub InsertRow_Basic()
'5行目の“手前”に1行挿入(5行目が下に押し下げられる)
Rows(5).Insert
'セル指定でも同じ(A5セルを含む行の手前に挿入)
Range("A5").EntireRow.Insert
End Sub
VB- 意味の確認:
- 挿入位置: 指定した行番号の「上」に新しい行が入ります。
- 結果: 元の行は下へシフトします。
複数行をまとめて挿入
Sub InsertRows_Multiple()
'3〜5行目の“手前”に3行分挿入(まとめて空行が入る)
Rows("3:5").Insert
'変数で柔軟に(6〜10行の手前に5行分挿入)
Dim r1 As Long, r2 As Long
r1 = 6: r2 = 10
Rows(r1 & ":" & r2).Insert
End Sub
VB- ポイント:
- 範囲指定: 「開始:終了」で対象行範囲を渡すと、その範囲の行数ぶん空行が入る。
- 連続空行: 大量の行を一度に空けたいときに便利。
行を挿入して書式や値もコピー(見た目を保つ)
Sub InsertRow_WithFormatCopy()
'5行目の手前に1行挿入し、すぐ上の行の書式を引き継ぐ
Rows(5).Insert
Rows(4).Copy
Rows(5).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
VB- ポイント:
- 書式の継承: 挿入行は“まっさら”になるため、直上行の書式をコピーすると崩れない。
- 値は貼らない: Formats のみなら安全。必要なら列幅や条件付き書式も別途。
最終行の下へ新規行を追加(よく使う定番)
Sub InsertRow_AppendAtBottom()
Dim last As Long
last = Cells(Rows.Count, "A").End(xlUp).Row 'A列基準の最終行
Rows(last + 1).Insert
'追加した行に初期値をセット
Cells(last + 1, "A").Value = "新規"
Cells(last + 1, "B").Value = Date
End Sub
VB- ポイント:
- 最終行取得: 基準列を決めて End(xlUp) で最終行を計算。
- 新規行: 最終行の次に行を挿入して初期値を投入。
テーブルに行を追加(構造化表への安全な追加)
Sub InsertRow_ToListObject()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("売上テーブル") 'テーブル名に合わせる
'テーブルの末尾に1行追加
lo.ListRows.Add
'追加行へ値を設定(構造化参照で列名指定が安心)
With lo.ListRows(lo.ListRows.Count).Range
.Columns(lo.ListColumns("日付").Index).Value = Date
.Columns(lo.ListColumns("担当").Index).Value = "営業A"
.Columns(lo.ListColumns("金額").Index).Value = 100000
End With
End Sub
VB- ポイント:
- ListRows.Add: テーブルは通常の Rows.Insert よりもテーブル専用の追加が安全。
- 列名で指定: 見出しの順番が変わっても壊れにくい。
例題で練習
例題1:見出し行の下に1行挿入し、見出しの書式を継承
Sub Example_InsertUnderHeader()
Rows(2).Insert '2行目(見出し)直下に空行
Rows(2).Copy '見出し行の書式をコピー
Rows(3).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
VB例題2:選択行の直前に空行を差し込む(選択依存しない安全版)
Sub Example_InsertBeforeSelection()
If TypeName(Selection) = "Range" Then
Dim r As Long
r = Selection.Row
Rows(r).Insert
End If
End Sub
VB例題3:毎行の上に空行を挿入(ループは下からが鉄則)
Sub Example_InsertBlankLinesBetween()
Dim last As Long, i As Long
last = Cells(Rows.Count, "A").End(xlUp).Row
For i = last To 2 Step -1
Rows(i).Insert '下から挿入すると行番号が崩れない
Next
End Sub
VB実務の落とし穴と対策
- 行番号がずれる問題:
- 対策: 複数箇所に挿入するループは必ず「下から上へ」進める。挿入で行番号が変わるため。
- 書式が崩れる:
- 対策: 挿入直後に直上行の書式を PasteSpecial xlPasteFormats で継承。必要に応じて列幅や条件付き書式も再適用。
- 結合セルの混在:
- 対策: 結合セルがある行への挿入は崩れやすい。結合を最小限にするか、結合を解除してから挿入。
- テーブルに通常挿入:
- 対策: テーブルは ListRows.Add を使う。通常の Rows.Insert はテーブル構造とぶつかることがある。
- 速度が遅い:
- 対策: 大量挿入時は Application.ScreenUpdating = False の併用、必要処理だけに絞る。書式コピーは最小限に。

