【Excel VBA】Forループを使って連番のワークシートを複数一括で作成する方法

月次レポートのために「4月」「5月」…「3月」という12枚のシートを用意したり、支店ごとの集計シートを「支部01」「支部02」…と連番で作成したりする作業は、手作業では非常に面倒です。

VBAの**For...NextループWorksheets.Addメソッドを組み合わせることで、このような連番シートの作成を瞬時に自動化**することが可能です。

この記事では、指定した数だけ、連番の名前を持つワークシートをブックの末尾に一括で追加する方法を解説します。


目次

完成したVBAコード

以下が、ブックの最後に「Report_1」から「Report_12」までの12枚のシートを連続して追加するVBAコードです。

Sub CreateMultipleSheets()

    ' 変数を宣言します
    Dim i As Long
    Dim sheetCount As Long
    Dim sheetNameBase As String
    
    '--- 設定箇所 ---
    sheetCount = 12 ' 作成したいシートの枚数
    sheetNameBase = "Report_" ' シート名の接頭辞(プレフィックス)
    '--- 設定ここまで ---

    ' 画面更新を一時的にオフにして処理を高速化
    Application.ScreenUpdating = False

    ' --- Forループで指定した回数だけ処理を繰り返す ---
    For i = 1 To sheetCount
    
        ' 1. ブックの末尾に新しいシートを追加
        '    Worksheets.Countで現在の最後のシートを特定し、その「After」に配置
        ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
        
        ' 2. 新しく追加されたシートの名前を変更
        '    .Addメソッドで追加されたシートはアクティブになるので、ActiveSheetで操作できる
        ActiveSheet.Name = sheetNameBase & i
        
    Next i
    
    ' 画面更新をオンに戻す
    Application.ScreenUpdating = True

    MsgBox sheetCount & "枚のシートを作成しました。"

End Sub

コードのポイント解説

① For…Next ループ

For i = 1 To sheetCount
    ' ... 繰り返したい処理 ...
Next i

For...Nextステートメントは、VBAで繰り返し処理を行う際の基本です。i = 1 To sheetCountと記述することで、カウンター変数iの値を1からsheetCount(この例では12)まで1ずつ増やしながら、間の処理を繰り返します。

② ブックの末尾にシートを追加

ThisWorkbook.Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

Worksheets.AddメソッドのAfter引数に、ブックの最後のシートを指定することで、常に新しいシートが一番右端に追加されるようにしています。 ThisWorkbook.Worksheets.Countは、現在のシートの総数を返すため、ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)は常に一番右端のシートを指します。

③ 連番の名前を設定

ActiveSheet.Name = sheetNameBase & i

Worksheets.Addで追加されたシートは、その時点でアクティブなシート(ActiveSheet)になります。その.Nameプロパティに対し、設定した接頭辞(sheetNameBase)とループのカウンター変数i&で連結した文字列を代入します。

これにより、ループが回るたびにiの値が1, 2, 3…と増え、「Report_1」「Report_2」「Report_3」…という連番の名前が付けられていきます。


【応用】ゼロ埋め(01, 02…)の連番にする方法

連番を「1, 2…」ではなく「01, 02…」のように桁数を揃えたい場合は、Format関数を使います。

上記のコードのシート名を付ける部分を、以下のように変更します。

' 変更前
' ActiveSheet.Name = sheetNameBase & i

' 変更後:Format関数で数値を「00」という書式に変換
ActiveSheet.Name = sheetNameBase & Format(i, "00")

Format(i, "00")は、数値iを「常に2桁で、1桁の場合は左を0で埋める」という書式の文字列に変換します。これにより、「Report_01」「Report_02」…「Report_12」といった名前を付けることができます。


まとめ

連番シートの一括作成は、Forループの典型的な活用例です。

  1. For i = 1 To 作成枚数 でループの骨格を作る。
  2. ループの中で**Worksheets.Add After:=...**を使い、シートを常に末尾に追加する。
  3. 追加したActiveSheet.Nameプロパティに、接頭辞とループ変数iを連結した名前を設定する。

このパターンを覚えておけば、面倒な定型シートの準備作業を大幅に効率化できます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次