Excel VBA 逆引き集 | 行を挿入

Excel VBA
スポンサーリンク

行を挿入

行の「挿入」は頻出の基本操作。初心者が迷いがちな「どこに挿入されるのか」「複数行」「見た目のコピー」「テーブルへの追加」まで、最短コードと安全テンプレートで整理します。ポイントは 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 の併用、必要処理だけに絞る。書式コピーは最小限に。
タイトルとURLをコピーしました