Excel VBAで列を挿入する方法を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
・複数列をまとめて挿入する書き方が分からない
・別のシートの列に挿入したいのに、違うシートが挿入されてしまう
ですよね。
今回はそんなお悩みを解決する、
・複数列をまとめて挿入する方法
・挿入した列の書式(色・罫線)を決める方法
・別シートの列に挿入する方法
・うまくいかないときの対処法
についてまとめます!
完成イメージ
列の挿入は、Columns(“列:列”).Insert の1行でできます。
今回は
・「商品/数量/単価/金額」の表に、VBAで「区分」「担当」「備考」の列を挿入する方法
をゴールにします。
挿入すると右側の列がずれますが、金額の数式は自動で追従します。
なお、複数列をまとめて挿入する方法・書式を引き継ぐ方法(CopyOrigin)・
別シートの列に挿入する方法・うまくいかないときの対処法もあわせてご紹介します。
早速実装して試してみましょう!

上の画像が完成形です。「区分」「担当」「備考」の列が挿入され、金額の数式も正しく追従しています。
もくじ
STEP1. 元データを用意する
まずは列を挿入する練習用の表を用意します。
1行目が見出し、2行目以降がデータです。
金額列(D列)は =B2*C2 の数式にしておきましょう。
数式にしておくと、列を挿入したときに参照が自動で調整されるのが確認できます。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| 商品 | 数量 | 単価 | 金額 |
|---|---|---|---|
| ノートPC | 8 | 148000 | |
| マウス | 25 | 3980 | |
| モニター | 12 | 32800 | |
| キーボード | 20 | 6800 | |
| プリンタ | 5 | 45800 | |
| USBハブ | 30 | 2480 | |
| Webカメラ | 10 | 8900 | |
| スピーカー | 15 | 5600 | |
| 外付けSSD | 18 | 12800 | |
| ヘッドセット | 22 | 4200 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
STEP2. 列を1つ挿入する(基本)
いちばん基本の書き方です。
Sub 列を挿入する()
' C列に1列挿入する
Columns("C:C").Insert
Cells(1, 3).Value = "区分"
End Sub
Columns(“C:C”) は「C列全体」という意味です。
そのまま .Insert を付けると、C列の位置に1列が差し込まれます。
元のC列(単価)以降は、1列ずつ右へずれます。
・Columns(“C:C”) はアクティブシートに効きます
・見出しを入れるときは Cells(1, 3)(1行3列=C1)のように書きます
STEP3. 複数列をまとめて挿入する
「担当」と「備考」のように2列まとめて挿入したいときは、範囲で指定します。
Sub 複数列を挿入する()
' F・G列の2列をまとめて挿入する
Columns("F:G").Insert
Cells(1, 6).Value = "担当"
Cells(1, 7).Value = "備考"
End Sub
Columns(“F:G”) のように「開始列:終了列」で書くと、その本数ぶんの列が挿入されます。
1列ずつ Insert を2回書くよりも、1行で済むうえに書式も揃います。
同じことを1列ずつループで書くこともできます。
Sub ループで挿入する()
Dim i As Long
For i = 1 To 3
Columns("F:F").Insert ' F列に3回挿入する
Next i
End Sub
Columns(“F:F”) を3回挿入すると、3列が追加されます。
挿入する本数を変数で決めたいときは、この書き方が便利ですね。

STEP4. 挿入した列の書式を決める(CopyOrigin)
挿入した列の色や罫線は、既定では「左の列」から引き継ぎます。
右の列から引き継ぎたいときは CopyOrigin を指定します。
Sub 書式を指定して挿入する()
' 左の列の書式を引き継ぐ(既定)
Columns("C:C").Insert CopyOrigin:=xlFormatFromLeftOrAbove
' 右の列の書式を引き継ぐ
Columns("E:E").Insert CopyOrigin:=xlFormatFromRightOrBelow
End Sub
| 定数 | 値 | 引き継ぐ書式 |
|---|---|---|
| xlFormatFromLeftOrAbove | 0 | 左(または上)の書式/既定 |
| xlFormatFromRightOrBelow | 1 | 右(または下)の書式 |
| xlFormatFromLeftOrAbove を省く | — | 左の書式(既定と同じ) |
上の画像のように、色が付いた列の隣に挿入すると、新しい列にも色が付きます。
意図しない色が付いたときは、この設定を思い出してください。
・色や罫線が意図せず付いたときは CopyOrigin を疑いましょう
・書式を引き継ぎたくなければ、挿入後に ClearFormats で消せます
STEP5. 別シートの列に挿入する
ここがいちばんハマりやすいポイントです。
Columns(“B:B”).Insert は「いま操作しているシート」の列に効きます。
別のシートに挿入したいときは、シートを指定してから実行します。
Sub 別シートに挿入する()
' × これだと「いま開いているシート」に挿入されてしまう
Columns("B:B").Insert
' ○ シート名を指定して挿入する
Worksheets("集計").Columns("B:B").Insert
Worksheets("集計").Cells(1, 2).Value = "区分"
End Sub
| 書き方 | 挿入されるシート |
|---|---|
| Columns(“B:B”).Insert | アクティブシート(いま操作中のシート) |
| Worksheets(“集計”).Columns(“B:B”).Insert | 「集計」シート |
| Sheets(2).Columns(“B:B”).Insert | 2番目のシート |
| ThisWorkbook.Worksheets(“集計”)… | マクロのあるブックの「集計」シート |
複数のブックを開いているときは、Workbooks(“ファイル名.xlsx”).Worksheets(“集計”) のように
ブックから指定すると確実です。

完成
「商品/数量/区分/単価/金額/担当/備考」の7列になりました。
挿入した列には見出しと書式が入り、金額の数式も自動で追従しています。
思ったとおりに挿入できましたか?

うまくいかないときの対処法(トラブルシュート)
実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| Insert しても何も起きない | 列の指定が文字列になっている | Columns(“C:C”) のように引用符で囲む/Columns(3) でも可 |
| 違うシートに挿入された | Columns はアクティブシートに効く | Worksheets(“シート名”).Columns(…) とシートを指定する |
| 色や罫線が勝手に付いた | 左の列の書式を引き継いでいる | CopyOrigin を指定する/ClearFormats で消す |
| 1列しか挿入されない | 範囲ではなく1列だけを指定している | Columns(“C:D”) のように範囲で指定する |
| 数式の参照がずれた | 挿入位置より右の参照がずれる | ずれてほしくない参照は絶対参照($)にする |
| エラー 1004 が出る | シートが保護されている/シート名が違う | Unprotect で保護を解除する/シート名を確認する |
よくある間違い
| 間違い | 起きること | 正しい書き方 |
|---|---|---|
| Columns(C:C) と書く | 変数として扱われエラー | Columns(“C:C”) と引用符で囲む |
| Rows と Columns を間違える | 行が挿入される | 列なら Columns、行なら Rows |
| 挿入した列に書式を設定し忘れる | 見た目がバラバラになる | 挿入直後に書式をまとめて設定する |
| 挿入後の列番号をそのまま使う | 1列ずつずれて意図しない列に書く | 挿入後の列番号で指定する |
| Select を使って挿入する | 遅く、画面がちらつく | Select せずに直接 Insert する |
列の挿入方法の使い分け
| やりたいこと | 書き方 |
|---|---|
| 1列挿入する | Columns(“C:C”).Insert |
| 2列まとめて挿入する | Columns(“C:D”).Insert |
| 書式を右から引き継ぐ | Columns(“C:C”).Insert CopyOrigin:=xlFormatFromRightOrBelow |
| 別シートに挿入する | Worksheets(“集計”).Columns(“B:B”).Insert |
| 本数を変数で決める | Columns(“C:C”).Resize(, n).Insert |
| 行を挿入する | Rows(“5:6”).Insert |
エク短流:複数列をまとめて挿入する実用例
実務では「必要な列をまとめて追加して、見出しと書式を一括で入れる」ことがよくあります。
次のコードは、「担当」と「備考」の2列を追加して書式まで一気に整える例です。
Sub 列を追加して書式まで整える()
Dim ws As Worksheet
Set ws = Worksheets("売上データ")
' 1) 「備考」の左に「担当」を1列挿入する
ws.Columns("G:G").Insert
ws.Cells(1, 7).Value = "担当"
' 2) 見出しと列幅をまとめて整える
With ws.Range("G1")
.Font.Bold = True
.Interior.Color = RGB(252, 228, 200)
End With
ws.Columns("G:G").ColumnWidth = 11
MsgBox "「担当」列を追加しました"
End Sub
挿入 → 見出し → 書式 の順にまとめて書くのがコツです。
ボタンに割り当てておけば、毎回の列追加作業を1クリックで終えられます。
シート名を付けるだけで解決することがほとんどですよ。
さいごに
今回は、Excel VBAで列を挿入する方法をまとめました。
2. 複数列は Columns(“C:D”).Insert のように範囲で指定
3. 挿入した列の書式は CopyOrigin で決める(既定は左の列)
4. 別シートは Worksheets(“シート名”).Columns(…) とシートを指定
5. 挿入すると右の列がずれるので、数式の参照は自動で追従する
列の挿入は、どのシートの列を動かすのかさえ押さえればカンタンですね。
表の項目が増えたときは、この手順をぜひ試してみてください。
最後までお読みいただきありがとうございました。







コメントを残す