ExcelVBAで作業を自動化していると、複数のブックを開いて処理を実行することがよくあります。その際、処理が終わった後に「不要なブックは閉じたい」「保存せずに閉じたい」「保存してから閉じたい」といったケースが頻繁に出てきます。
この記事では「vba ファイルを閉じる」をテーマに、次の内容を詳しく解説します。
✅ Close メソッドの基本構文
✅ 保存あり・なしの使い分け
✅ 特定のファイルだけ閉じる方法
✅ 全てのブックを閉じる方法
✅ 閉じる前に確認メッセージを表示する方法
✅ 実務で役立つサンプルコード集
✅ 注意点とエラー対策
目次
✅ ファイルを閉じる基本構文
ExcelVBAでブックを閉じる基本は Workbook.Close です。
Workbooks("Book1.xlsx").Close
・ポイント
- 引数を指定しない場合、Excelは「保存しますか?」という確認メッセージを表示します。
- 保存の有無を自動化する場合は、
SaveChanges引数を指定します。
✅ 保存するかどうかを指定して閉じる
・ 保存してから閉じる
Workbooks("Book1.xlsx").Close SaveChanges:=True
変更を保存したうえで閉じます。
参考:【VBA】ExcelVBAでワイルドカードを使ってファイルを自動で開く方法
・ 保存せずに閉じる
Workbooks("Book1.xlsx").Close SaveChanges:=False
変更内容を破棄して閉じます。
※自動処理ではこのパターンが多いです。
✅ アクティブなブックを閉じる
ブック名を指定せず、現在操作しているブックを閉じることも可能です。
ActiveWorkbook.Close SaveChanges:=False
参考:【VBA】 「アクティブ」とは?初心者でも理解できる概念と使い方ガイド✅ 特定のファイルだけ閉じる
開いている複数のブックの中から、特定のブックのみ閉じたい場合は名前を指定します。
Dim wb As Workbook
Set wb = Workbooks("集計.xlsx")
wb.Close SaveChanges:=True
✅ 全てのブックを閉じる
処理が終了したらすべてのブックを閉じる、といった運用も可能です。
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then
wb.Close SaveChanges:=False
End If
Next wb
ThisWorkbookはマクロが入っているブック。- 誤って閉じないよう条件分岐を入れるのがポイントです。
✅ 閉じる前に確認メッセージを表示する
ユーザーに確認してから閉じる場合は MsgBox を組み合わせます。
Dim answer As VbMsgBoxResult
answer = MsgBox("保存して閉じますか?", vbYesNoCancel + vbQuestion, "確認")
If answer = vbYes Then
ActiveWorkbook.Close SaveChanges:=True
ElseIf answer = vbNo Then
ActiveWorkbook.Close SaveChanges:=False
Else
MsgBox "処理をキャンセルしました"
End If
✅ 実務で役立つサンプルコード集
・ 複数ブックを開いて処理後に自動で閉じる
Sub ProcessAndClose()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Data\売上データ.xlsx")
' --- ここで処理 ---
MsgBox wb.Sheets(1).Range("A1").Value
wb.Close SaveChanges:=False
End Sub
・ マクロを実行したブック以外を全て閉じる
Sub CloseOthers()
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then
wb.Close SaveChanges:=False
End If
Next wb
End Sub
・ 指定フォルダ内のCSVを順番に開いて処理し、閉じる
Sub ProcessCSV()
Dim filePath As String
Dim folderPath As String
Dim wb As Workbook
folderPath = "C:\Data\CSV\"
filePath = Dir(folderPath & "*.csv")
Do While filePath <> ""
Set wb = Workbooks.Open(folderPath & filePath)
' --- 処理 ---
MsgBox wb.Sheets(1).Range("A1").Value
wb.Close SaveChanges:=False
filePath = Dir()
Loop
End Sub
✅ 注意点とエラー対策
- 保存確認メッセージが邪魔になる
→SaveChangesを必ず指定することで、ユーザー操作不要にできます。 - 保存してはいけない場合に注意
→ マスターとなるテンプレートなどはSaveChanges:=Falseを徹底すること。 - マクロ実行中のブックを閉じない
→ThisWorkbookを閉じるとマクロ自体が止まります。除外条件を入れましょう。 - 大量のブックを閉じる場合は警告オフ
Application.DisplayAlerts = False ' 閉じる処理 Application.DisplayAlerts = Trueこうすることで「保存しますか?」のダイアログを抑止できます。
■ まとめ
ExcelVBAでファイルを閉じる方法は、以下のパターンに分けられます。
- 基本:
Workbook.Close - 保存する/しないを指定:
SaveChanges:=True/False - 特定のファイルのみ閉じる:名前を指定
- 全部閉じる:
For Eachでループ処理 - 確認メッセージ付き:
MsgBoxと組み合わせ
業務自動化では、「不要なブックを閉じる」処理を最後に入れるだけで、ユーザーの手間を大幅に削減できます。