【Excel VBA】シート枚数を指定して新しいブックを作成する方法

通常、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

処理の最後に、①で記憶しておいた元の設定値originalSheetCountApplication.SheetsInNewWorkbookに書き戻します。

サンプルコードのようにエラーハンドリング構文と組み合わせることで、たとえブックの作成中に何かエラーが発生したとしても、必ずこの復元処理が実行されるように保証しています。これは、ユーザーのExcel環境を尊重する上で非常に重要な作法です。


まとめ

指定した枚数のシートを持つ新しいブックを作成する、安全で推奨される手順は以下の通りです。

  1. 現在の**Application.SheetsInNewWorkbookの値を変数に記憶**する。
  2. InputBoxなどでユーザーから作成したい枚数を取得する。
  3. Application.SheetsInNewWorkbookユーザーが指定した値を設定する。
  4. **Workbooks.Add**を実行する。
  5. 処理の最後に、必ず記憶しておいた変数を使い、Application.SheetsInNewWorkbookを元の設定値に戻す

この「記憶して、変更し、元に戻す」というパターンは、Excelのグローバルな設定をVBAで一時的に変更する際の基本となります。

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

この記事を書いた人

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

目次