通常、Excelで新しいブックを作成すると、デフォルトで1枚(または設定によっては3枚)のシートが用意されます。しかし、マクロで「月次レポート用に12枚のシートがあるブック」や「分析用に5枚のシートがあるブック」を最初から作成したい、という場合もあります。
VBAの**Application.SheetsInNewWorkbook
プロパティを一時的に変更することで、このようなシート枚数を指定したブックの新規作成**が可能です。
この記事では、ユーザーに枚数を入力してもらい、その数だけシートを持つ新しいブックを作成し、最後にExcelの元の設定を復元する、という安全で丁寧な方法を解説します。
完成したVBAコード
Sub CreateNewWorkbookWithSpecifiedSheets()
' 変数を宣言します
Dim originalSheetCount As Long
Dim userSpecifiedCount As Variant
' --- 1. 元の既定シート枚数を記憶 ---
' 処理後にユーザーの設定を元に戻すために、現在の設定を保存しておきます
originalSheetCount = Application.SheetsInNewWorkbook
' --- 2. InputBoxでユーザーから作成したいシート枚数を取得 ---
userSpecifiedCount = Application.InputBox( _
Prompt:="新しいブックに作成するシートの枚数を入力してください(1~255)", _
Title:="シート枚数の指定", _
Default:=3, _
Type:=1) ' Type:=1 は数値のみの入力を許可
' キャンセルが押された、または無効な値の場合は処理を終了
If userSpecifiedCount = False Or userSpecifiedCount < 1 Or userSpecifiedCount > 255 Then Exit Sub
On Error GoTo ErrorHandler ' エラーが発生しても必ず設定を元に戻すため
' --- 3. Excelの既定シート枚数を一時的に変更 ---
Application.SheetsInNewWorkbook = CLng(userSpecifiedCount)
' --- 4. 新規ブックを作成 ---
' この時点での設定(userSpecifiedCount)が適用されます
Workbooks.Add
' --- 5. 既定のシート枚数を元の設定に戻す(最重要) ---
ExitRoutine:
Application.SheetsInNewWorkbook = originalSheetCount
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました。", vbCritical
' エラーが発生した場合も、必ず設定を元に戻す
Resume ExitRoutine
End Sub
コードのポイント解説
① 元の設定を記憶する
originalSheetCount = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook
は、Excelアプリケーション全体で共有される「グローバルな設定」です。マクロがこの設定を勝手に変更したままで終わると、ユーザーが次に手動で新しいブックを作成した際に、意図しない数のシートが作成されてしまい、混乱の原因となります。
そのため、処理の最初にまず現在の設定値をoriginalSheetCount
という変数に記憶しておきます。
② Application.InputBox
で枚数を取得
userSpecifiedCount = Application.InputBox(..., Type:=1)
InputBox
でユーザーからの入力を受け付けます。ここでType:=1
と指定することで、入力欄に数値しか受け付けないように制限でき、不正な入力によるエラーを防ぎます。ユーザーが「キャンセル」ボタンを押した場合、この関数はFalse
を返すため、その後の処理を中断させています。
③ 設定の変更と新規ブックの作成
Application.SheetsInNewWorkbook = CLng(userSpecifiedCount)
Workbooks.Add
ユーザーが入力した枚数をApplication.SheetsInNewWorkbook
に設定し、その直後にWorkbooks.Add
を実行します。これにより、変更された設定が適用され、指定した枚数のシートを持つ新しいブックが作成されます。
④ 元の設定に戻す(最重要)
Application.SheetsInNewWorkbook = originalSheetCount
処理の最後に、①で記憶しておいた元の設定値originalSheetCount
をApplication.SheetsInNewWorkbook
に書き戻します。
サンプルコードのようにエラーハンドリング構文と組み合わせることで、たとえブックの作成中に何かエラーが発生したとしても、必ずこの復元処理が実行されるように保証しています。これは、ユーザーのExcel環境を尊重する上で非常に重要な作法です。
まとめ
指定した枚数のシートを持つ新しいブックを作成する、安全で推奨される手順は以下の通りです。
- 現在の**
Application.SheetsInNewWorkbook
の値を変数に記憶**する。 InputBox
などでユーザーから作成したい枚数を取得する。Application.SheetsInNewWorkbook
にユーザーが指定した値を設定する。- **
Workbooks.Add
**を実行する。 - 処理の最後に、必ず記憶しておいた変数を使い、
Application.SheetsInNewWorkbook
を元の設定値に戻す。
この「記憶して、変更し、元に戻す」というパターンは、Excelのグローバルな設定をVBAで一時的に変更する際の基本となります。