昨日の時点のデータに戻したいけれど、バックアップがない…
毎日バックアップファイルを手作業で保存するのが面倒!
実務の中で、エクセルを毎日更新するようなルーチン作業を手作業で行っていませんか?大切なデータを守るためにバックアップは必須ですが、毎回手動で「名前を付けて保存」をするのは手間がかかりますし、つい忘れてしまいがちです。
そこで今回は、エクセルを閉じる際に「バックアップを取りますか?」と自動で確認し、指定したフォルダに日時付きでコピーを保存するVBAを紹介します。
コードを書き換えることなく、「設定シート」で保存先を管理できるため、VBA初心者の方でもコピペだけで簡単に「自動バックアップ環境」を作ることができます。毎日の業務に安心をプラスして、効率化を進めていきましょう!
Office付きで有料AIを月1800円以下で使う方法をコチラで紹介しています!
【コピペOK】VBAで終了時に自動バックアップを作成するコード
まずは、今回使用するVBAコードを紹介します。以下のコードをコピーして使用してください。
なお、このコードは通常の「標準モジュール」ではなく、「ThisWorkbook」という場所に貼り付ける必要があります。
貼り付け場所の詳細は、後述の「使い方の手順」で詳しく解説します。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim response As VbMsgBoxResult
Dim backupPath As String
Dim fileName As String
Dim fso As Object
' ダイアログ表示
response = MsgBox("終了します。現在の状態でバックアップを作成しますか?", vbYesNo + vbQuestion, "バックアップ確認")
If response = vbYes Then
' 1. 設定シートからパスを取得(シート名等は適宜変更)
On Error Resume Next
backupPath = Sheets("設定").Range("B1").Value
On Error GoTo 0
' パスが空欄、またはフォルダがない場合終了
If backupPath = "" Or Dir(backupPath, vbDirectory) = "" Then
MsgBox ("フォルダが設定されていません")
Exit Sub
End If
' 末尾に\がない場合は付与
If Right(backupPath, 1) <> "\" Then backupPath = backupPath & "\"
' 2. バックアップファイル名の作成(日時タイムスタンプ)
' 例:元ファイル名_20231027_103015.xlsm
fileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & "_" & _
Format(Now, "yyyymmdd_hhmmss") & ".xlsm" ' 拡張子は適宜合わせる
' 3. コピーを保存 (SaveCopyAsを使用!)
On Error Resume Next
ThisWorkbook.SaveCopyAs backupPath & fileName
If Err.Number = 0 Then
MsgBox "バックアップを保存しました:" & vbCrLf & fileName, vbInformation
Else
MsgBox "バックアップの保存に失敗しました。", vbExclamation
End If
On Error GoTo 0
End If
End Sub
このコードのポイントは、SaveAs(名前を付けて保存)ではなく、SaveCopyAs(コピーを保存)を使用している点です。
現在開いているファイルはそのままに、裏側でこっそりとバックアップファイルを作成するため、作業の邪魔をしません。
Office付きで有料AIを月1800円以下で使う方法をコチラで紹介しています!
【番外】すぐ使えるエクセルファイル
VBAが分からないという方向けに、VBAが入ったエクセルファイルを用意しました。ここに内容を書き込むだけで、簡単にフォルダが自動作成できます。
エクセルファイルはNoteで販売しています。すぐに使いたい方はこちらを活用してください。
【さらにお得】効率化ツール全セット版も公開中!
Outlook操作やファイル整理など、今後追加されるツールもすべて使い放題になる「まとめ買いセット」も紹介しています。
複数使う予定の方は、こちらの方が圧倒的にお得です。
自動バックアップ作成VBAの動作と結果の紹介
このVBAがどのような動きをするのか、具体的なイメージを紹介します。
誤操作を防ぎ、確実に履歴を残すための仕組みになっています。
1. 設定シートに、バックアップファイルを保存するフォルダを入力
「設定」というシートを作成し、「B1」セルに保存したいフォルダのアドレスを入力します。
2. 終了時に確認ダイアログが表示される
エクセルの右上の「×」ボタンを押して終了しようとすると、「終了します。現在の状態でバックアップを作成しますか?」というメッセージが表示されます。
ここで「いいえ」を選べば通常通り終了し、「はい」を選ぶとバックアップ処理が始まります。
3. 日時付きのファイル名で保存される
バックアップされたファイルは、指定したフォルダに自動的に保存されます。
この際、ファイル名の末尾に「ファイル名_20260208_120000」のように、「年月日_時分秒」が自動で付与されます。
単純な上書き保存だと、過去のデータは消えてしまいます。しかし、このVBAなら「閉じるたび」に新しいファイルが生成されるため、履歴として残すことができます。
自動バックアップ作成VBAの使い方について
それでは、実際にこの機能をエクセルに実装する手順を解説します。
手順1:エクセルの準備(設定シートの作成)
まず、VBAを動かすための設定を行います。
- 新しいシートを作成し、シート名を「設定」に変更
- セルA1に「保存先」と入力。
- セルB1に、バックアップファイルを保存したいフォルダのパス(アドレス)を入力
フォルダのパスは、フォルダを開いた状態でアドレスバーを右クリックし、「アドレスのコピー」を選択すると簡単に取得できます。
今後、保存先を変えたい場合は、このB1セルの内容を書き換えるだけでOKです。
手順2:VBAコードの埋め込み(重要)
次に、先ほどのコードをエクセルに埋め込みます。
エクセルの「開発」タブから「Visual Basic」エディタを開きます。
「開発」を出す設定やコードの書き方は、VBAの基礎まとめのページで詳しく解説しています。こちらの記事もぜひ参考にしてみてください。
また今回は通常の標準モジュールではなく、ThisWorkbookに張り付けるようにしてください。
なぜ「ThisWorkbook」なのかというと、今回のコードは「ブックが閉じる前(BeforeClose)」というイベントを検知する必要があるからです。
このイベントは標準モジュールでは反応しないため、ブック全体を管理するThisWorkbookに記述する必要があります。
手順3:動作確認
コードを貼り付けたら、VBAエディタを閉じてエクセルに戻ります。
一度ファイルを保存してから、エクセルの「×」ボタンで閉じてみてください。
「バックアップを作成しますか?」というダイアログが出れば成功です。
指定したフォルダを開き、日時が入ったバックアップファイルが生成されているか確認しましょう。
まとめ
今回は、VBAを使ってエクセル終了時に自動でバックアップを作成する方法を紹介しました。
この仕組みを取り入れるだけで、データ保存のルーティン業務から解放されます。また万が一のトラブルに備えておくことで、トラブルシューティングにかかる時間も短縮され、一石二鳥です。
ぜひ、あなたの業務ファイルにもこのコードをコピペして、安全な環境を構築してください。
このブログでは、このように日常業務が楽になるテクニックから、VBA等のスキルになる情報まで幅広く紹介しています。また現在、Office+生成AIを2年間月1800円以下で使える、お得なキャンペーンをMicrosoftが実施しています。裏技的なやり方ですが大変お得なキャンペーンなので、興味がある方はぜひこの記事も参考にしてみてください!
MicrosoftのOffice+生成AIが月1800円以下で使えるお得な裏技はコチラ!

