📊 Excel VBA Top100
⚡

AutoSaveBackup

自動化

現在のブックを自動的にバックアップとして保存します

一定時間ごとに自動的にファイルのバックアップを作成するマクロです。Excelの自動回復機能とは異なり、実際にバックアップファイルとして保存されるため、後からでも確実に復元できます。バックアップの間隔と保存先はマクロで設定でき、ファイル名にはタイムスタンプが自動付加されます。長時間の作業中に不意の電源断やシステムクラッシュが発生しても、最後のバックアップ時点まで作業を復元できます。内部ではApplication.OnTimeメソッドでタイマーを仕込み、指定間隔ごとにWorkbook.SaveCopyAsを呼び出してバックアップを作成します。AutoBackupOnCloseが「閉じる瞬間」の1回限りの保存であるのに対し、本マクロは作業中も継続的にバックアップを取り続けるため、長時間セッションでの不慮の事故に強い構成です。

AutoSaveBackup デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: AutoSaveBackup を実行すると、現在のブックが「_backup_YYYYMMDD_HHMMSS」というサフィックス付きで保存されます

🎯 活用シーン

  • ✓1日中開きっぱなしで作業するファイルに30分ごとの自動バックアップを設定して、突然のクラッシュによる作業損失を防ぎたいとき
  • ✓複数人で共有する重要ファイルに定期バックアップを設定して、誰かが誤ったデータを保存してしまっても元に戻せる状態を保ちたいとき
  • ✓大量データの入力中に一定間隔でバックアップを自動作成して、入力ミスがあっても適切な時点に戻れるようにしたいとき
  • ✓長時間の集計作業やデータ入力中に、突然のフリーズや電源トラブルに備えたいとき
  • ✓複数人が交代で使う共有パソコンで、誰の操作でも定期的に安全な復元ポイントを残したいとき

💡 実装のヒント

  • ▸バックアップの実行タイミングは Application.OnTime メソッドで制御されます。Excel を閉じるとタイマーがリセットされるため、次回起動時に再度マクロを実行する必要があります。
  • ▸バックアップファイルの蓄積を防ぐため、古いバックアップを自動削除する処理を組み合わせることをお勧めします。
  • ▸ネットワークドライブに保存する場合は接続が不安定なときにバックアップが失敗することがあります。ローカルドライブへのバックアップと組み合わせることをお勧めします。
  • ▸バックアップ間隔を短くしすぎるとファイルサイズやディスク容量を圧迫するため、10〜30分程度を目安に設定することをお勧めします。
  • ▸AutoBackupOnCloseと併用すると、作業中と終了時の両方でバックアップが確保され安全性がさらに高まります。

💻 VBAコード

' AutoSaveBackup
' -----------------
' Macro Name: AutoSaveBackup
' Description: 現在のブックを自動的にバックアップとして保存します
' Parameters: なし
' Returns: なし
' Usage: AutoSaveBackup を実行すると、現在のブックが「_backup_YYYYMMDD_HHMMSS」というサフィックス付きで保存されます
' -----------------

Sub AutoSaveBackup()
    On Error GoTo ErrorHandler
    
    Dim wb As Workbook
    Dim backupPath As String
    Dim fileName As String
    Dim timestamp As String
    
    Set wb = ActiveWorkbook
    
    ' タイムスタンプの作成
    timestamp = Format(Now, "yyyymmdd_hhmmss")
    
    ' ファイル名の作成
    fileName = Left(wb.Name, InStrRev(wb.Name, ".") - 1)
    backupPath = wb.Path & "\" & fileName & "_backup_" & timestamp & ".xlsm"
    
    ' バックアップ保存
    wb.SaveCopyAs backupPath
    
    MsgBox "バックアップを作成しました:" & vbCrLf & backupPath, vbInformation, "バックアップ完了"
    
    Exit Sub
    
ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub