VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】ファイルを閉じる方法|保存あり・なしの使い分けと実務活用例

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

✅ 注意点とエラー対策

  1. 保存確認メッセージが邪魔になる
    SaveChanges を必ず指定することで、ユーザー操作不要にできます。
  2. 保存してはいけない場合に注意
    → マスターとなるテンプレートなどは SaveChanges:=False を徹底すること。
  3. マクロ実行中のブックを閉じない
    ThisWorkbook を閉じるとマクロ自体が止まります。除外条件を入れましょう。
  4. 大量のブックを閉じる場合は警告オフ
    Application.DisplayAlerts = False
    ' 閉じる処理
    Application.DisplayAlerts = True
    

    こうすることで「保存しますか?」のダイアログを抑止できます。


■ まとめ

ExcelVBAでファイルを閉じる方法は、以下のパターンに分けられます。

  • 基本:Workbook.Close
  • 保存する/しないを指定SaveChanges:=True/False
  • 特定のファイルのみ閉じる:名前を指定
  • 全部閉じるFor Each でループ処理
  • 確認メッセージ付きMsgBox と組み合わせ

業務自動化では、「不要なブックを閉じる」処理を最後に入れるだけで、ユーザーの手間を大幅に削減できます。

    -VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作