列を挿入
列の「挿入」は表の構造を整えるときによく使います。初心者が迷いやすい「どこに挿入されるのか」「複数列」「書式をコピーする」「テーブルに追加する」まで、最短コードと安全テンプレートで整理しました。基本は 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 の併用で高速化。
