【Excel VBA】新規ブックを追加し、オブジェクト変数で確実に操作する方法

VBAでデータを集計し、その結果を新しいブックにまとめて保存する、といった処理は非常に一般的です。このとき、「Workbooks.Addで新しいブックを作ったはいいが、そのブックをどうやって正確に操作すれば良いのか?」という問題に直面することがあります。

この記事では、新しく作成したブックを**「オブジェクト変数」**に格納することで、その後の操作を確実に行うための最も重要で基本的な方法を解説します。


目次

なぜオブジェクト変数を使うのか?

VBAでWorkbooks.Addを実行すると、「Book1」や「Book2」といった名前の新しいブックが作成されます。しかし、この名前は可変であり、どの名前になるかは実行時の状況に依存します。

' 悪い例:不安定なコード
Workbooks.Add
ActiveWorkbook.SaveAs "C:\temp\test.xlsx" ' ←もしユーザーが別のブックをクリックしたら、違うブックが保存されてしまう!

このような不安定さをなくし、「たった今作成した、あのブック」を直接かつ確実に操作するために、オブジェクト変数を使います。Workbooks.Addメソッドは、作成したブックのオブジェクトそのものを返すので、それを受け取るための「入れ物」がオブジェクト変数です。


完成したVBAコード

以下が、新しいブックを作成し、オブジェクト変数を使ってデータを入力、保存、クローズまで行う一連のVBAコードです。

Sub CreateAndManageNewWorkbook()

    ' Workbookオブジェクトを格納する変数を宣言します
    Dim newBook As Workbook
    
    ' --- 1. 新規ブックを追加し、そのオブジェクトを変数に格納 ---
    ' Workbooks.Addが返した「新しいブック」をnewBook変数にセットします
    Set newBook = Workbooks.Add
    
    ' --- 2. オブジェクト変数を使って、新しいブックを操作 ---
    ' この時点でのブック名を確認
    MsgBox "新規ブック「" & newBook.Name & "」を作成しました。"
    
    ' 新規ブックの最初のシートのA1セルに値を入力
    newBook.Worksheets(1).Range("A1").Value = "このブックはVBAで作成されました。"
    
    ' --- 3. 新規ブックを保存して閉じる ---
    ' 保存先のパスとファイル名を指定して保存
    newBook.SaveAs Filename:=ThisWorkbook.Path & "\New_VBA_Report.xlsx"
    ' 保存後、ブックを閉じる
    newBook.Close
    
    ' --- 4. オブジェクト変数を解放 ---
    Set newBook = Nothing
    
    MsgBox "新規ブックの作成、保存、クローズが完了しました。"

End Sub

コードのポイント解説

① Dim … As Workbook

Dim newBook As Workbook

まず、Workbookという「型」のオブジェクトを格納するための変数をDimで宣言します。As Workbookと型を明示することで、VBAが「この変数にはブックの情報が入るのだな」と理解し、後のコード記述で入力候補を表示してくれる(IntelliSense)など、開発上のメリットがあります。

② Set newBook = Workbooks.Add

Set newBook = Workbooks.Add

これがこのテクニックの心臓部です。

  1. Workbooks.Addが実行され、新しいブックが作成されます。
  2. Workbooks.Addは、戻り値として「作成されたブックのオブジェクト」を返します。
  3. Setキーワードを使い、その返されたオブジェクトをnewBookという変数に代入(セット)します。

これ以降、newBookという変数は、作成された新規ブックそのものを指すようになります。

③ newBookを使った操作

newBook.Worksheets(1).Range("A1").Value = "..."
newBook.SaveAs ...
newBook.Close

一度newBook変数にブックを格納してしまえば、あとはActiveWorkbookのような曖昧な指定ではなく、newBookという名前で直接そのブックを操作できます。これにより、他のブックが開いていようが、ユーザーがどのウィンドウをクリックしようが、コードは常に目的のブックを正確に操作し続けます。


まとめ

VBAで新しいオブジェクト(ブック、シート、図形など)を作成する際は、必ずSetキーワードとオブジェクト変数を使って、作成したオブジェクトへの参照を保持するのが鉄則です。

Set myObject = ParentObject.Add

この基本パターンを徹底することで、

  • 信頼性: 状況に左右されない、安定したマクロが作れる。
  • 可読性: コードを読むだけで、どのオブジェクトを操作しているかが一目瞭然になる。

といった大きなメリットが得られます。これは、VBAプログラミングにおける最も基本的で重要な作法の一つです。

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

この記事を書いた人

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

目次