【Excelマクロ】バックアップを自動作成してトラブルを防ごう

突然の上書き、消えて困った経験はありませんか?

Excelファイルを扱っていると「間違って上書きしてしまった」「元に戻せない」などのトラブルが発生することがあります。

そんなときに備えて、自動でバックアップを取る仕組みを作っておくと非常に安心です。

実装するメリット

  • 万が一のときでも、元のファイルをすぐに復元できる
  • 上書き保存時に自動でバックアップが残るようにできる
  • 人為的なミス(消去・変更)を防ぎやすくなる

具体例:バックアップを自動作成するマクロ

  1. 元のファイルと同じ内容のコピーを作る
  2. 保存先フォルダに日付付きの名前で保存する
  3. すべて自動で行う
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 イベントを使えば、「保存のたびに自動でバックアップされる」仕組みを作ることも可能です。

トラブルを未然に防ぐための第一歩として、ぜひこの仕組みをあなたの業務に取り入れてみてください。

コメント