【VBAリファレンス|実務向け】VBAで新規ブック作成時のシート枚数を自在に制御するテクニック

スポンサーリンク

1. 導入:なぜこの技術が重要なのか

Excelマクロを使って自動集計や帳票出力を行う際、新しいブックを生成する機会は非常に多いです。通常、Excelのオプション設定で「新規ブックのシート数」は決まっていますが、業務内容によっては「常に1枚のブックを作りたい」「テンプレートとして特定の枚数が必要」といった要望が生まれます。

手動で設定を変更するのではなく、VBAの実行中だけ一時的にシート枚数を変更し、処理が終われば元に戻すという手法を身につければ、環境に依存しない堅牢な自動化プログラムを作成することができます。

2. 基礎知識:SheetsInNewWorkbookプロパティとは

Excelには、新規ブックを作成する際の初期シート枚数を管理する Applicationオブジェクトのプロパティとして SheetsInNewWorkbook が存在します。

このプロパティを操作することで、Excelのグローバルな設定をプログラムから書き換えることが可能です。ただし、ここでの注意点は「設定値がExcel全体に影響する」という点です。そのため、プログラムの冒頭で現在の設定値を退避させ、処理の終了時に必ず元の値へ戻すという「環境を汚さない配慮」が実務では不可欠です。

3. 実装/解決策

以下の手順で実装を行います。
1. 現在の「新規ブックのシート数設定」を保持するための変数を用意する。
2. Application.SheetsInNewWorkbook の値を保存する。
3. Application.SheetsInNewWorkbook に必要な枚数を代入する。
4. Workbooks.Add メソッドで新規ブックを作成する。
5. 処理が完了したら、保存しておいた値を Application.SheetsInNewWorkbook に再代入して元に戻す。

4. サンプルプログラム

以下のコードは、指定した枚数のシートを持つ新しいブックを作成し、その後設定を自動的に復元する実用的なテンプレートです。

Sub CreateWorkbookWithSpecificSheets()
‘ 現在の設定を保持する変数
Dim originalSheetCount As Integer
‘ 作成したブックを操作するためのオブジェクト変数
Dim newWb As Workbook
‘ 作成したいシート枚数
Dim targetSheetCount As Integer

targetSheetCount = 3 ‘ ここで作成したいシート枚数を指定します

‘ 1. 現在の設定値を退避
originalSheetCount = Application.SheetsInNewWorkbook

‘ 2. 新規ブックのシート数を一時的に変更
Application.SheetsInNewWorkbook = targetSheetCount

‘ 3. ブックを追加
Set newWb = Workbooks.Add

‘ 4. 確認用ログ
MsgBox “シート数 ” & targetSheetCount & ” 枚でブックを作成しました。”

‘ 5. 設定を元に戻す(重要!)
Application.SheetsInNewWorkbook = originalSheetCount
End Sub

5. 応用・注意点

エラーハンドリングの重要性
もしブック作成処理の中でエラーが発生し、プログラムが途中で停止してしまうと、ユーザーのExcel設定が「書き換わったまま」になってしまいます。これを防ぐために、実務コードでは On Error GoTo 構文 を使い、エラーが発生した場合でも確実に「設定を元に戻す処理」を通るような工夫をすることをお勧めします。

また、シート数に「0」を指定することはできません(1〜255の範囲である必要があります)。入力値を受け取る場合は、必ず入力チェックを行うようにしましょう。

タイトルとURLをコピーしました