【Excel VBA】列を挿入する方法!複数列や別シート列も対応可!

【Excel VBA】列を挿入する方法!複数列や別シート列も対応可!
Excel VBAで列を挿入する方法を知りたいときはないでしょうか。

けど、そんな中で悩むことは、

・Columns(“C:C”).Insert と書いたのに、思った列が動かない
・複数列をまとめて挿入する書き方が分からない
・別のシートの列に挿入したいのに、違うシートが挿入されてしまう

ですよね。

今回はそんなお悩みを解決する、

・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列ずつ右へずれます。

POINT
・列を挿入すると右側の列が1つずつ右へずれるので、数式の参照は自動で調整されます
・Columns(“C:C”) はアクティブシートに効きます
・見出しを入れるときは Cells(1, 3)(1行3列=C1)のように書きます
C列に1列挿入した状態

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列が追加されます。
挿入する本数を変数で決めたいときは、この書き方が便利ですね。
2列まとめて挿入した状態

STEP4. 挿入した列の書式を決める(CopyOrigin)

挿入した列の色や罫線は、既定では「左の列」から引き継ぎます。
右の列から引き継ぎたいときは CopyOrigin を指定します。

Sub 書式を指定して挿入する()
    ' 左の列の書式を引き継ぐ(既定)
    Columns("C:C").Insert CopyOrigin:=xlFormatFromLeftOrAbove

    ' 右の列の書式を引き継ぐ
    Columns("E:E").Insert CopyOrigin:=xlFormatFromRightOrBelow
End Sub
定数 値 引き継ぐ書式
xlFormatFromLeftOrAbove 0 左(または上)の書式/既定
xlFormatFromRightOrBelow 1 右(または下)の書式
xlFormatFromLeftOrAbove を省く — 左の書式(既定と同じ)

上の画像のように、色が付いた列の隣に挿入すると、新しい列にも色が付きます。
意図しない色が付いたときは、この設定を思い出してください。

POINT
・挿入した列は既定で「左の列」の書式を引き継ぎます
・色や罫線が意図せず付いたときは 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クリックで終えられます。

タカヒロ

タカヒロ
列が思ったところに入らないときは、Columns がどのシートを見ているかを先に疑ってください。
シート名を付けるだけで解決することがほとんどですよ。

さいごに

今回は、Excel VBAで列を挿入する方法をまとめました。

1. 1列の挿入は Columns(“C:C”).Insert
2. 複数列は Columns(“C:D”).Insert のように範囲で指定
3. 挿入した列の書式は CopyOrigin で決める(既定は左の列)
4. 別シートは Worksheets(“シート名”).Columns(…) とシートを指定
5. 挿入すると右の列がずれるので、数式の参照は自動で追従する

列の挿入は、どのシートの列を動かすのかさえ押さえればカンタンですね。

表の項目が増えたときは、この手順をぜひ試してみてください。

最後までお読みいただきありがとうございました。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image