月次レポートのために「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
を連結した名前を設定する。
このパターンを覚えておけば、面倒な定型シートの準備作業を大幅に効率化できます。