月次レポートのために「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ループの典型的な活用例です。
- For i = 1 To 作成枚数でループの骨格を作る。
- ループの中で**Worksheets.Add After:=...**を使い、シートを常に末尾に追加する。
- 追加したActiveSheetの.Nameプロパティに、接頭辞とループ変数iを連結した名前を設定する。
このパターンを覚えておけば、面倒な定型シートの準備作業を大幅に効率化できます。

 
			 
			 
			 
			 
			 
			 
			