突然の上書き、消えて困った経験はありませんか?
Excelファイルを扱っていると「間違って上書きしてしまった」「元に戻せない」などのトラブルが発生することがあります。
そんなときに備えて、自動でバックアップを取る仕組みを作っておくと非常に安心です。
実装するメリット
- 万が一のときでも、元のファイルをすぐに復元できる
- 上書き保存時に自動でバックアップが残るようにできる
- 人為的なミス(消去・変更)を防ぎやすくなる
具体例:バックアップを自動作成するマクロ
- 元のファイルと同じ内容のコピーを作る
- 保存先フォルダに日付付きの名前で保存する
- すべて自動で行う
Sub CreateBackup()
Dim backupPath As String
Dim fileName As String
Dim backupName As String
' 現在開いているブックの名前を取得
fileName = ThisWorkbook.Name
' バックアップ用ファイル名を生成(例:Book1_20250531.xlsx)
backupName = Left(fileName, InStrRev(fileName, ".") - 1) & "_" & Format(Now, "yyyymmdd") & ".xlsm"
' バックアップ先パスを作成
backupPath = ThisWorkbook.Path & "¥" & backupName
' バックアップを保存(名前を変えてコピー保存)
ThisWorkbook.SaveCopyAs backupPath
MsgBox "バックアップを保存しました:" & vbCrLf & backupName
End Sub
コードの説明
ThisWorkbook.FullName
:現在のブックの完全パスを取得します。Left(fileName, InStrRev(fileName, ".") - 1)
:拡張子の手前までを抜き出し、ファイル名の加工に使います。Format(Now, "yyyymmdd")
:現在の日付を「20250531」の形式で取得します。SaveCopyAs
:元のブックのまま保存せず、コピーだけを保存するメソッドです。
ポイント
- 元のブックは変更されません。
- コピーだけが作成されるため、安心して使えます。
- バックアップファイルは日付付きなので整理もしやすいです。
応用:保存時に自動実行させたい場合
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call CreateBackup
End Sub
このコードを ThisWorkbook
に書くことで、保存するたびにバックアップが自動で作成されるようになります。
注意点
- バックアップを保存するフォルダが読み取り専用だとエラーになります。
- 同じ日付で複数保存すると、上書きされる可能性があります。
- その場合は、時間(hhmmss)まで追加してユニーク(重複しない)なファイル名にする方法もあります
- ファイルサイズが大きいと、保存に少し時間がかかることもあります。
まとめ
VBAを使えば、ほんの数行のコードでバックアップ処理を自動化でき、日常業務のリスクを大きく減らせます。
SaveCopyAs
を使うことで、元のファイルを変更せずにコピーだけを保存でき、InStrRev
関数を活用すれば、拡張子の前までの文字列を正確に切り出せます。
日付付きファイル名と組み合わせれば、管理や復元もスムーズに行えます。
さらに Workbook_BeforeSave
イベントを使えば、「保存のたびに自動でバックアップされる」仕組みを作ることも可能です。
トラブルを未然に防ぐための第一歩として、ぜひこの仕組みをあなたの業務に取り入れてみてください。
コメント