VBAで1クリックで上書き保存してエクセルファイルを閉じる方法

エクセル検索
HOMEUserForm印刷画面ファイル図形
日付・時刻データセル関数VBA関数

Excelを使っていて作業が終わったら、上書き保存ボタンを押してファイルを閉じるのが面倒だと思ったことありませんか?

たった1クリック1秒でできたら作業効率がアップして楽になる方法を、ここではユーザーフォームに配置した「コマンドボタン」にVBAコードを記述して使用する方法をご紹介いたします。

上書き保存をして閉じるVBA

Closeオブジェクト

エクセルに標準機能として用意されているVBA「Closeオブジェクト」は、上書き保存してエクセルを閉じる例として、よく書籍やネットに掲載されている方法です。

下記はコマンドボタン1に上書き保存するVBAコードを記述しています。

Closeオブジェクト

Private Sub CommandButton1_Click()
ThisWorkbook.Close SaveChanges:=True
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. エクセルファイルを閉じる時に変更を保存する
  3. マクロ記録終了
波乗りアヒル

ThisWorkBookがいいのかActiveWorkBookのどちらがいいのかは分かりませんが、試した結果は一緒だったので気にしていません。

この方法だと、ワークシートだけしか閉じられずエクセル自体は開いたままになってしまうので、エクセルファイルを手動で閉じる手間があるので、1クリックでできずに使い物になりませんでした。

Quitオブジェクト

エクセルに標準機能として用意されているVBA「Quitオブジェクト」は、開いているエクセルファイルが変更されている時には、変更を保存するかどうかを確認するメッセージが表示されると掲載されている方法です。

下記はコマンドボタン1に上書き保存するVBAコードを記述しています。

Quitオブジェクト

Private Sub CommandButton1_Click()
Application.Quit
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 変更を保存するかどうかを確認するメッセージを表示する
  3. マクロ記録終了

もちろんこれも、先ほどのCloseオブジェクトと同じくワークシート上にコマンドボタンを配置した時に、マクロを登録するためのVBAコードです。

そして、変更がある場合には下記のようにメッセージが表示されますので保存してエクセルファイルを閉じるか、保存しないかを選択できます。

application-quit
保存するかどうかのメッセージが表示

エクセルファイルを閉じる方法は2つありますが、Closeオブジェクトでは完全にエクセルと閉じられず、Quitオブジェクトでは、いちいち上書き保存を聞かれ、作業効率化にならないので意味がありませんでした。

QuitとCloseの合わせ技

エクセルファイルを閉じるCloseオブジェクトとQuitオブジェクトなのに、一長一短で使うのあきらめましたが、一緒に使ったらどうなるか試してみると・・・

波乗りアヒル

結果成功!
このVBAコードで、コマンドボタン1クリックで上書き保存してエクセル自体を閉じることができました。

コピペOK!

Private Sub CommandButton1_Click()
Application.Quit
ThisWorkbook.Close savechanges:=True
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 変更を保存するかどうかを確認するメッセージを表示する
  3. エクセルファイルを閉じる時に変更を保存する
  4. マクロ記録終了

このようにVBAコードを記述すると、なぜか上書き保存をするかどうかの確認メッセージが表示されずに、自動的に上書き保存されてエクセルファイルが閉じられるようになりました。

だだし、QuitとCloseの順番が逆だと失敗しますのでご注意を!

波乗りアヒル

正直、これができたからといっても僅かながらの手間の省力化と時短効果にしかなりませんが、できたことに満足ですけどね。

上書き保存のアレンジVBA

「上書き保存」するVBAコードを記述したコマンドボタンを誤ってクリックしたとしても、上書き保存されてファイルが閉じられるだけなので問題はないと思います。

もし、念のため「はい」「いいえ」を選択できるようにしたいならば、「Quitオブジェクト」だけを使えばいいのです。

入力済みデータ消去して上書き保存終了

ここでは入力済みセルの一部データクリアしてから上書き保存できるようにアレンジしてみました。

コピペOK!

Private Sub CommandButton1_Click()
Msg = MsgBox(“抽選データ消去してから上書き保存しますか?”, Buttons:=vbYesNo + vbQuestion)
If Msg = vbYes Then
Sheets(“抽選”).Range(“A3:A10,B3:B10,C3:C10”).ClearContents
Application.Quit
ThisWorkbook.Close savechanges:=True
End If
End Sub

解説
  1. コマンドボタン1をクリックしたら
  2. メッセージを表示して「抽選データ消去してから上書き保存しますか?」を「はい」「いいえ」で選択させます。
  3. もし「はい」を選んだら
  4. シート名「抽選」のセルA3~A10とB3~B10とC3~C10の各範囲の値を消す(クリア)
  5. 上書き保存をする
  6. エクセルファイルを閉じる
  7. IFステートメント終了
  8. マクロ記述終了

ちょっと長くなりましたが、簡単にいうと、「はい」を選択したら不要データクリアして上書き保存してファイルを閉じる、「いいえ」を選択したら、何もしないで元に戻るという事です。

波乗りアヒル

データクリアのVBAコードを追加記述する前は、わざわざ手作業でデータクリアをしていた手間がを省くことができたので、かなりの作業効率化ができました。

関連記事

どこかにビューーン
ちょっとの工夫で往復無料の時代が来た!!

新着ページ

よく見られているページ

大容量無料ファイル転送サービス【ACデータ】 無料イラスト【イラストAC】

紅葉スポット

2024年5月11日からマイルと楽天ポイントとの相互交換提携開始!

交換レート0.5:1なので半分になってしまいますが、使い方次第で実質3倍の価値まで引き上げられる方法です。