Excel VBA 逆引き集 | 列を挿入

Excel VBA
スポンサーリンク

列を挿入

列の「挿入」は表の構造を整えるときによく使います。初心者が迷いやすい「どこに挿入されるのか」「複数列」「書式をコピーする」「テーブルに追加する」まで、最短コードと安全テンプレートで整理しました。基本は Columns.Insert または Range.EntireColumn.Insert を使います。


基本:1列挿入の最短コード

Sub InsertColumn_Basic()
    'C列の手前に1列挿入(C列が右へシフト)
    Columns("C").Insert

    'セル指定でも同じ(A5セルを含む列の手前に挿入)
    Range("A5").EntireColumn.Insert
End Sub
VB
  • ポイント:
    • 指定列の「左」に新しい列が入ります。
    • 元の列は右へシフトします。

複数列をまとめて挿入

Sub InsertColumns_Multiple()
    'C〜E列の手前に3列分挿入
    Columns("C:E").Insert

    '変数で柔軟に(F〜H列の手前に3列分挿入)
    Dim c1 As String, c2 As String
    c1 = "F": c2 = "H"
    Columns(c1 & ":" & c2).Insert
End Sub
VB
  • ポイント:
    • 範囲指定で複数列を一度に挿入できる。
    • 挿入列数は指定範囲の列数に一致。

書式をコピーして挿入(見た目を保つ)

Sub InsertColumn_WithFormatCopy()
    'C列の手前に1列挿入し、左隣の列の書式をコピー
    Columns("C").Insert
    Columns("B").Copy
    Columns("C").PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
End Sub
VB
  • ポイント:
    • 挿入列は“まっさら”になるため、直前列の書式をコピーすると崩れない。
    • 値は貼らず、Formats のみなら安全。

最終列の右へ新規列を追加(よく使う定番)

Sub InsertColumn_AppendAtRight()
    Dim lastCol As Long
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    Columns(lastCol + 1).Insert
    Cells(1, lastCol + 1).Value = "新規列"
End Sub
VB
  • ポイント:
    • 最終列取得: End(xlToLeft) で可変長の表に対応。
    • 新規列: 最終列の右に追加して見出しを設定。

テーブルに列を追加(構造化表への安全な追加)

Sub InsertColumn_ToListObject()
    Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects("売上テーブル") 'テーブル名に合わせる

    'テーブルの末尾に1列追加
    lo.ListColumns.Add

    '追加列の見出しを設定
    lo.ListColumns(lo.ListColumns.Count).Name = "備考"
End Sub
VB
  • ポイント:
    • ListColumns.Add: テーブルは通常の Columns.Insert よりも専用の追加が安全。
    • 列名指定: 見出しを設定しておくと後の参照が楽。

例題で練習

例題1:見出し列の右に1列挿入し、見出しの書式を継承

Sub Example_InsertAfterHeader()
    Columns("B").Insert          'B列の右に空列
    Columns("B").Copy            '見出し列の書式をコピー
    Columns("C").PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
End Sub
VB

例題2:選択列の直前に空列を差し込む(選択依存しない安全版)

Sub Example_InsertBeforeSelection()
    If TypeName(Selection) = "Range" Then
        Selection.EntireColumn.Insert
    End If
End Sub
VB

例題3:表の各列の間に空列を挿入(ループは右からが鉄則)

Sub Example_InsertBlankColumnsBetween()
    Dim lastCol As Long, i As Long
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = lastCol To 2 Step -1
        Columns(i).Insert   '右から挿入すると列番号が崩れない
    Next
End Sub
VB

実務の落とし穴と対策

  • 列番号がずれる: 複数箇所に挿入するループは必ず「右から左へ」進める。
  • 書式が崩れる: 挿入直後に直前列の書式を PasteSpecial xlPasteFormats で継承。
  • 結合セルの混在: 結合セルがある列への挿入は崩れやすい。結合を最小限にするか解除してから挿入。
  • テーブルに通常挿入: テーブルは ListColumns.Add を使う。通常の Columns.Insert は構造とぶつかることがある。
  • 速度が遅い: 大量挿入時は Application.ScreenUpdating=False の併用で高速化。
タイトルとURLをコピーしました