【VBAスタンダード対策】Workbooks.Open メソッドの引数と戻り値の処理を攻略!
外部のExcelファイルをVBAから開く際に使う Workbooks.Open メソッド。試験では、開いたブックを変数に格納して操作する際の「Set ステートメントの要否」や「括弧 ( ) をつける・つけないの記述ルール」が非常に頻出します。
1. 問題:Workbooks.Open メソッドによるブック変数の取得
【 問題 】 下記のコードは、C:\Data\Sales.xlsx を開き、開いたブックの1番目のシート名をメッセージボックスに表示しようとしています。空欄 ( A ) に入る記述として正しいものはどれでしょうか?
Dim wb As Workbook
Dim filePath As String
filePath = "C:\Data\Sales.xlsx"
( A )
MsgBox wb.Worksheets(1).Name
End Sub
① wb = Workbooks.Open(filePath)
② Set wb = Workbooks.Open(filePath)
③ Set wb = Workbooks.Open filePath
④ Workbooks.Open(filePath) As wb
2. 正解:Open メソッドの構文に関する正解
正解: ② Set wb = Workbooks.Open(filePath)
3. 解説:メソッドの戻り値取得と括弧 ( ) の記述ルール
Workbooks.Open メソッドは、指定したファイルを開くと同時に、開いたそのファイル自体を表す Workbook オブジェクトを呼び出し元に返します(戻り値)。
1. オブジェクト変数への代入は Set が必須!
変数
wb は Workbook という「オブジェクト(参照型データ)」です。VBAにおいてオブジェクトを変数に代入する際は、必ず頭に Set キーワードをつけなければなりません(①のように Set を省くと「オブジェクト変数または With ブロック変数が設定されていません」というエラーになります)。2. 戻り値を受け取る場合は引数をカッコ ( ) で囲む!
VBAでは、メソッドの戻り値を変数に代入して受け取る場合、引数をカッコで囲む必須ルールがあります(③のように Set を使ってもカッコがないとコンパイルエラーになります)。
★ 正解の Set wb = Workbooks.Open(filePath) は、「Setによるオブジェクト代入」と「戻り値取得のためのカッコ囲み」の両方のルールを満たしています。
ここが試験に出る!: スタンダード試験では、戻り値を受け取らない呼び出し(例:Workbooks.Open filePath)と、変数で受け取る呼び出し(例:Set wb = Workbooks.Open(filePath))のカッコや Set の有無を混ぜ合わせた誤答選択肢が頻出します。「Set で受けるならカッコが必要」というペアの構造を丸ごと暗記しておきましょう。
4. まとめ
「開いたブックを変数 wb に保持して操作するなら Set wb = Workbooks.Open(...) 」。この構文を押さえておけば、別ブックを開いてデータを転記し、保存して閉じる(wb.Close SaveChanges:=True)という一連の外部ファイル自動処理も完璧に制御できます。