Add について

Excel VBAのベースとなるWorkbooksオブジェクトを調べた流れで、Addメソッドについても簡単に調べてみました


Add メソッドの仕様

まず、公式ドキュメントに基づいて仕様を確認しましょう。

  • メソッド:Workbooks.Add
  • 構文:expression.Add (Template)  ※expression は Workbooks オブジェクトを指します。 Microsoft Learn+1
  • 引数 Template はオプション/Variant 型。説明は以下の通り:
    • 省略時 → Excel既定の「空のブック(複数シート)」が作成されます。 Microsoft Learn+1
    • 文字列で既存の Excel ファイルを指定 → そのファイルをテンプレートにして作成。パス含む可。 Microsoft Learn+1
    • XlWBATemplate 定数(例:xlWBATWorksheet, xlWBATChart 等)を指定 → 特定タイプの1シート構成ブックを作成。 Microsoft Learn
  • 戻り値:新規作成された Workbook オブジェクト。 Microsoft Learn
  • 備考:新規ブックが「アクティブブック(active workbook)」になります。 Microsoft Learn+1

XlWBATemplate列挙型

  • xlWBATChart … グラフ
  • xlWBATExcel4MacroSheet … Excel バージョン 4 のマクロ
  • xlWBATExcel4IntlMacroSheet … Excel バージョン 4 のインターナショナル マクロ
  • xlWBATWorksheet … ワークシート

サンプル

ここでは、基本→応用までの3つのサンプルを、解説付きで紹介します。


🧩 サンプル①:最も基本的な使い方(引数なし)

📘 コード

Sub CreateBlankWorkbook()
    Dim wb As Workbook
    ' 新しいブックを作成
    Set wb = Workbooks.Add
    
    ' 作成されたブックの最初のシートに文字を書き込む
    wb.Worksheets(1).Range("A1").Value = "Hello, VBA!"
End Sub

💡 解説

  • Workbooks.Add は引数を省略すると、「空の新規ブック」を作成します。
  • 返り値(戻り値)は新しく作成された Workbook オブジェクトです。
    そのため、Set wb = Workbooks.Add のように変数へ代入しておくと、あとから安全に操作できます。
  • wb.Worksheets(1) は「1枚目のシート」を指定しています。
    Range("A1").Value = "Hello, VBA!" でセルA1に文字を書き込んでいます。

✅ ポイント

  • 新しいブックは自動的にアクティブブック(ActiveWorkbook)になりますが、
    アクティブ操作に頼るとバグが出やすいので、変数(wb)経由で操作するのが基本です。

🧩 サンプル②:テンプレートファイルから新規作成

📘 コード

Sub CreateFromTemplate()
    Dim wb As Workbook
    
    ' 既存のテンプレートを指定して新しいブックを作成
    Set wb = Workbooks.Add(Template:="C:\Templates\ReportTemplate.xlsx")
    
    ' テンプレートを元にしたブックに自動で日付を入力
    wb.Worksheets(1).Range("B2").Value = "日付:" & Date
End Sub

💡 解説

  • Add の引数 Template にファイルパスを指定すると、
    そのブックをテンプレートとして新規作成します。
  • 例えば「報告書フォーマット」や「見積書の書式」をテンプレート化しておけば、
    ワンクリックで同じフォーマットの新規ファイルが生成できます。
  • wb.Worksheets(1).Range("B2") に日付を挿入しておくことで、
    作成時点の日付が自動入力される実務的なサンプルになっています。

✅ ポイント

  • テンプレートファイルの場所(C:\Templates\ReportTemplate.xlsx)は、実際の運用では共有フォルダやネットワークドライブに置くと便利です。
  • テンプレートが存在しない場合、実行時エラーになります。
    → エラーハンドリングを加えておくとより堅牢です。

🧩 サンプル③:自動保存付きの実務向けコード

📘 コード

Sub CreateAndSave()
    Dim wb As Workbook
    ' 新規ブックを作成
    Set wb = Workbooks.Add
    
    With wb
        ' ドキュメントプロパティを設定
        .Title = "月次レポート"
        .Subject = "売上報告"
        
        ' ファイル名を「年月付き」で自動生成して保存
        .SaveAs Filename:="C:\Reports\MonthlyReport_" & Format(Date, "yyyymm") & ".xlsx"
    End With
End Sub

💡 解説

  • With wb 構文で、作成したブックの設定をまとめて記述しています。
  • .Title.Subject はプロパティ情報に登録され、ファイルの詳細情報に反映されます。
  • SaveAs によって、新しく作ったブックを指定フォルダに即保存します。
    Format(Date, "yyyymm") は「年月(例:202510)」の形式で日付をファイル名に埋め込んでいます。

✅ ポイント

  • 自動化ツールでは「ファイルを保存して閉じる」処理を組み合わせることが多いです。
    例:wb.Close SaveChanges:=True
  • ファイル名に日付や時刻を入れておくと、重複保存のトラブルを防げます。

⚙️ 応用テクニック:Workbooks.Addをさらに使いこなす

● 特定のタイプのブックを作る

Set wb = Workbooks.Add(xlWBATWorksheet)

このように xlWBATWorksheet を指定すると、
「ワークシート1枚だけの新規ブック」が作れます。
(環境設定で複数シートが既定の場合でも1枚に固定できます)

● 複数ブックをまとめて生成

Dim wb As Workbook, i As Long
For i = 1 To 3
    Set wb = Workbooks.Add
    wb.Worksheets(1).Range("A1").Value = "ファイルNo:" & i
Next i

このようにループを使えば、複数のレポートファイルを一気に作成するツールも簡単に作れます。


⚠️ 注意点まとめ

注意点内容
アクティブ化Addで作ったブックが自動的にアクティブになります。変数で操作するのが安全。
シート数Excel設定「新しいブックのシート数」に依存します。1枚にしたい場合はテンプレートや引数指定を。
テンプレート指定ファイルパスが正しくないとエラーになるため、存在チェックをおすすめ。
保存処理Add直後は未保存状態。SaveAsを使ってファイル名を明示的に指定しましょう。
メモリ負荷多数のブックを開いたままにしない。不要になったら .Close で閉じる。

・その他

新しいWorkbookオブジェクトの作り方はわかりました

次は既存のWorkbookの開き方について調べようと思います

ではでは

広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い

シェアする