【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を連結した名前を設定する。

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

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

この記事を書いた人

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

目次