VBAでファイルを開くには Workbooks.Open、閉じるには Workbooks("ファイル名").Close を使います。
開くときはフルパスの指定が必要で、ThisWorkbook.Path を使うと毎回パスを書かずに済みます。保存するかどうかも Close に一言添えるだけで指定できます。
この記事では、次の内容を順番に解説します。
- ファイルを開く基本コード(フルパス指定)
- ThisWorkbook.Pathを使った応用
- 保存あり・保存なしで閉じる方法
- よくあるエラーと対処法
VBAでファイルを開くには?
VBAでファイルを開くには Workbooks.Open を使います。カッコの中にファイルのフルパス(Cドライブからの完全な住所のようなもの)を書きます。
Workbooks.Open "C:¥Users¥Username¥Documents¥ファイル.xlsx"
なぜフルパスが必要なのか
Windowsでは別フォルダに同じ名前のファイルを作れます。
そのため「どのフォルダにあるファイルか」をVBAに正確に伝えるために、フルパスでの指定が必要です。ファイル名だけでは「どれを開けばいいか」がVBAにはわかりません。
毎回フルパスを書かずに済む方法は?
マクロファイルと同じフォルダにあるファイルを開く場合は、ThisWorkbook.Path を使うと便利です。パスを直接べた打ちしなくて済むため、ファイルを別の場所に移動してもコードを直す必要がありません。
Workbooks.Open ThisWorkbook.Path & "¥" & "A.xlsx"
コードの解説
ThisWorkbook:マクロが書かれている「このファイル」を指します。.Path:そのファイルが置かれているフォルダのパスを返します。& "¥" & "A.xlsx":パスの末尾に区切り文字とファイル名をつなげています。
たとえばマクロファイルが C:¥Users¥Username¥Documents にある場合、上のコードは Workbooks.Open "C:¥Users¥Username¥Documents¥A.xlsx" と同じ意味になります。
VBAでファイルを閉じるには?
開いているファイルを閉じるには Workbooks("ファイル名").Close を使います。開くときと違い、ファイル名だけで指定できます。
Workbooks("A.xlsx").Close
なぜファイル名だけで閉じられるのか
Excelでは同じ名前のファイルを同時に開くことができません。そのため、ファイル名を書けば必ず1つのファイルだけが対象になります。フルパスの指定は不要です。
注意点:拡張子の表示設定によって書き方が変わる
ファイル名には拡張子(.xlsx や .xlsm)をつける場合とつけない場合があります。Windowsの「拡張子を表示する」設定がオンの場合は拡張子あり、オフの場合は拡張子なしで指定します。自分のパソコンの設定に合わせて書いてください。
保存あり・保存なしでファイルを閉じるには?
開いたファイルを閉じるとき、保存するかどうかを SaveChanges ではっきり指定できます。指定しないと「保存しますか?」というダイアログが表示されてしまい、マクロが途中で止まってしまいます。
' 保存せずに閉じる
Workbooks("A.xlsx").Close SaveChanges:=False
' 保存して閉じる
Workbooks("A.xlsx").Close SaveChanges:=True
- SaveChanges:=False:変更を破棄してファイルを閉じます。データを読み取るだけの処理に使います。
- SaveChanges:=True:変更を保存してファイルを閉じます。データを書き込んだ後に使います。
まとめ
VBAでファイルを開く・閉じる操作は、複数ファイルを扱う業務自動化の基本です。用途に応じて次のように使い分けましょう。
- フルパスで開く:
Workbooks.Open "C:¥...¥ファイル.xlsx"。場所が固定されている場合に使う。 - ThisWorkbook.Pathで開く:
Workbooks.Open ThisWorkbook.Path & "¥A.xlsx"。マクロと同じフォルダのファイルを開く場合に使う。ファイルを移動してもコードを修正しなくて済む。 - 保存せずに閉じる:
Workbooks("A.xlsx").Close SaveChanges:=False。データ読み取り専用の処理に使う。 - 保存して閉じる:
Workbooks("A.xlsx").Close SaveChanges:=True。書き込み後に使う。
よくある質問
Workbooks.Openでファイルが見つからないエラーが出る場合は?
パスの書き方が間違っている可能性が高いです。
よくある原因は3つあります。
①フォルダの区切り文字が ¥(円マーク)ではなく /(スラッシュ)になっている
②ファイル名のスペルミス、③拡張子(.xlsx など)が抜けている、です。
どんなパスが取得されているか確認したい場合は Debug.Print ThisWorkbook.Path をイミディエイトウィンドウで実行すると確認できます。もしくは、MsgBoxで確認する方法もあります。
ファイルを開いたあと、そのファイルを操作するにはどうすればいい?
開いたファイルを変数(入れ物)に入れておくと操作しやすくなります。
Dim wb As WorkbookSet wb = Workbooks.Open(ThisWorkbook.Path & "¥A.xlsx")
のように書くと、wb.Sheets(1).Range("A1").Value のようにそのファイルのセルにアクセスできます。
SaveChangesを指定しないと何が起きる?
変更があった場合に「保存しますか?」というダイアログが表示されます。
マクロが自動で動いている途中にダイアログが出ると処理が止まってしまうため、SaveChanges:=True または False を必ず書いておくのがおすすめです。
パスワード付きファイルをVBAで開くことはできる?
できます。
Workbooks.Open のあとに Password:="パスワード" を追加します。
例:Workbooks.Open "C:¥...¥ファイル.xlsx", Password:="1234"。ただしコードの中にパスワードをそのまま書くことになるため、他の人に見られないよう注意してください。
ThisWorkbook.PathはOneDriveやSharePointでも使える?
OneDriveやSharePointに保存されたファイルでは、ThisWorkbook.Path がWebのURLを返してしまう場合があります。
その場合は Workbooks.Open でうまく動かないことがあります。
パソコン上のOneDriveフォルダ(エクスプローラーから見えるフォルダ)に保存されている場合は通常通り使えます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



