【Excel VBA】「変更を保存しますか?」の確認メッセージなしでブックを閉じる方法

VBAでブックを閉じる(.Close)際に、もしそのブックに未保存の変更があると、Excelは「変更を保存しますか?」という確認メッセージを表示します。これによりマクロの実行が一時停止し、ユーザーの応答を待つ状態になってしまいます。これでは完全な自動化はできません。

この記事では、.Closeメソッドの**SaveChanges引数**を使い、この確認メッセージを完全に抑制し、**変更を自動で「保存する」または「破棄する」**方法を解説します。


目次

Workbook.Close の SaveChanges引数

ブックを閉じるCloseメソッドには、SaveChangesという非常に重要な引数があります。この引数にTrueFalseを指定することで、保存の動作をコントロールできます。

SaveChanges の値動作
True変更を自動で上書き保存して、メッセージなしで閉じます。
False変更を自動で破棄して、メッセージなしで閉じます。
省略ユーザーに**「変更を保存しますか?」の確認メッセージを表示**します。(マクロが一時停止)

Google スプレッドシートにエクスポート


完成したVBAコード

① 変更を「保存して」メッセージなしで閉じる

このコードは、ブックに加えた変更を自動で上書き保存し、確認メッセージなしでブックを閉じます。

Sub SaveAndCloseBook()
    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    ' 変更を保存して閉じる
    ' 注意: まだ一度も保存されていない新規ブックの場合、「名前を付けて保存」ダイアログが表示されます
    targetBook.Close SaveChanges:=True
End Sub

② 変更を「破棄して」メッセージなしで閉じる

このコードは、ブックに加えた変更をすべて破棄し、確認メッセージなしでブックを閉じます。

Sub DiscardAndCloseBook()
    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    ' 変更を破棄して閉じる
    targetBook.Close SaveChanges:=False
End Sub

【応用】未保存ブックを考慮した堅牢なコード

SaveChanges:=Trueは便利ですが、新規作成してから一度も保存していないブック(”Book1″など)に対して使うと、「名前を付けて保存」のダイアログが表示されてしまい、結局マクロが止まってしまいます。

これを避けるため、「ブックが一度でも保存されたことがあるか」で処理を分岐させるのが、より安全で確実な方法です。

コードと解説

Sub SmartCloseBook()
    Dim bookToClose As Workbook
    Set bookToClose = ActiveWorkbook

    ' ブックの保存履歴を.Pathプロパティの有無で判断
    If bookToClose.Path <> "" Then
        ' 保存履歴のあるブック → 変更を保存して閉じる
        bookToClose.Close SaveChanges:=True
        MsgBox "変更を保存してブックを閉じました。"
    Else
        ' 新規ブック("Book1"など)→ 変更を破棄して閉じる
        bookToClose.Close SaveChanges:=False
        MsgBox "新規ブックへの変更は破棄して閉じました。"
    End If
End Sub
  • If bookToClose.Path <> "" Then: .Pathプロパティは、ブックが保存されているフォルダのパスを返します。一度も保存されていないブックでは、このプロパティは空の文字列("")になります。これを利用して、ブックが新規ブックか既存のブックかを判断しています。

まとめ

確認メッセージなしでブックを閉じるには、.CloseメソッドのSaveChanges引数を使い分けます。

  • 変更を保存して閉じたい場合: myBook.Close SaveChanges:=True
  • 変更を破棄して閉じたい場合: myBook.Close SaveChanges:=False
  • 新規ブックも考慮して安全に処理したい場合: .Pathプロパティで保存済みかを確認し、処理を分岐させる。

このSaveChanges引数をマスターすることで、ファイルの開閉を伴うVBA処理を、完全に自動化してスムーズに実行できるようになります。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次