【Excel VBA】現在のブックを日時付きで自動バックアップ!データ損失を防ぐ賢い保存術

Excel・VBA

はじめに:なぜExcel VBAでバックアップが必要なのか?

Excelでの作業中、「うっかり上書き保存してしまった」「ファイルが壊れて開けない」「誤って削除してしまった」といった経験はありませんか? 重要なデータが失われることは、業務に大きな支障をきたします。

手動でのバックアップは手間がかかり、忘れがちです。そこで役立つのがExcel VBA(Visual Basic for Applications)を使った自動バックアップです。今回は、現在のブックを「日時付き」で自動的にバックアップする方法を、初心者の方でもすぐに実践できるよう解説します。

日時付きバックアップのメリット

単にバックアップを取るだけでなく、ファイル名に日時を含めることには以下の大きなメリットがあります。

  • バージョン管理の容易化: いつ時点のファイルか一目で分かり、過去の任意の時点に戻せます。
  • ファイル名重複の回避: 常にユニークなファイル名で保存されるため、既存のバックアップファイルを上書きする心配がありません。
  • 復旧ポイントの明確化: 問題が発生した際に、どの時点のファイルを使えば良いか判断しやすくなります。

【基本編】現在のブックを日時付きでバックアップするVBAコード

まずは、最もシンプルな日時付きバックアップのコードから見ていきましょう。

VBAコードの解説

このコードは、現在のExcelブックと同じフォルダ内に「_Backup」フォルダを作成し、その中に「元のファイル名_YYYYMMDD_HHMMSS.xlsm」という形式でバックアップを保存します。

  • ThisWorkbook.Path: 現在のブックが保存されているフォルダのパスを取得します。
  • Format(Now, "yyyymmdd_hhmmss"): 現在の日時を「年(4桁)月(2桁)日(2桁)_時(2桁)分(2桁)秒(2桁)」の形式に変換します。
  • ThisWorkbook.Name: 現在のブックの名前(拡張子含む)を取得します。
  • Replace(ThisWorkbook.Name, ".xlsm", ""): ファイル名から拡張子を取り除きます。
  • ThisWorkbook.SaveCopyAs filePath: 指定したパスにブックのコピーを保存します。このメソッドは、元のブックを開いたままコピーを作成するため非常に便利です。
Sub BackupCurrentWorkbookWithTimestamp()
    Dim backupFolderPath As String
    Dim backupFileName As String
    Dim filePath As String
    Dim originalFileNameWithoutExt As String
    
    ' バックアップを保存するフォルダパスを設定
    ' 現在のブックと同じフォルダ内に "_Backup" フォルダを作成
    backupFolderPath = ThisWorkbook.Path & "\_Backup\"
    
    ' 元のファイル名から拡張子を除いた部分を取得
    originalFileNameWithoutExt = Replace(ThisWorkbook.Name, ".xlsm", "") ' 必要に応じて拡張子を調整
    originalFileNameWithoutExt = Replace(originalFileNameWithoutExt, ".xlsb", "") ' xlsbの場合も考慮
    originalFileNameWithoutExt = Replace(originalFileNameWithoutExt, ".xlsx", "") ' xlsxの場合も考慮
    
    ' バックアップファイル名を "元のファイル名_YYYYMMDD_HHMMSS.xlsm" の形式で作成
    backupFileName = originalFileNameWithoutExt & "_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
    
    ' 保存するフルパスを作成
    filePath = backupFolderPath & backupFileName
    
    ' バックアップフォルダが存在しない場合、作成する
    If Dir(backupFolderPath, vbDirectory) = "" Then
        MkDir backupFolderPath
    End If
    
    ' 現在のブックのコピーを日時付きで保存
    ThisWorkbook.SaveCopyAs filePath
    
    MsgBox "ブックのバックアップが完了しました。" & vbCrLf & vbCrLf & _
           "保存先: " & backupFolderPath & vbCrLf & _
           "ファイル名: " & backupFileName, vbInformation, "バックアップ完了"
End Sub

コードの実行方法

  1. Excelを開き、Alt + F11を押してVBE(VBAエディタ)を起動します。
  2. 左側のプロジェクトエクスプローラーで、対象のブック(例: VBAProject(ファイル名.xlsm))を右クリックし、「挿入」→「標準モジュール」を選択します。
  3. 開いたモジュールウィンドウに上記のコードを貼り付けます。
  4. VBEを閉じてExcelに戻り、Alt + F8を押してマクロダイアログを開きます。「BackupCurrentWorkbookWithTimestamp」を選択して「実行」ボタンをクリックします。
  5. または、シート上にボタンを配置し、そのボタンにこのマクロを登録することもできます。

【応用編】マクロを自動実行するには?(イベントプロシージャ)

手動でマクロを実行するのも良いですが、特定のタイミングで自動的にバックアップが取られるように設定すると、さらに便利です。

これには「イベントプロシージャ」を使用します。ブックの保存時や閉じる時など、特定のイベントが発生した際にマクロが自動で実行されます。

ブックを閉じる時に自動実行する例

このコードは、ブックを閉じようとした際にバックアップを実行します。これにより、作業の最後に必ず最新のバックアップが残るようになります。

設定方法: VBEでプロジェクトエクスプローラーの「ThisWorkbook」をダブルクリックし、開いたコードウィンドウに以下のコードを貼り付けてください。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' バックアップ処理を実行
    Call BackupCurrentWorkbookWithTimestamp
    
    ' 必要であれば、元のブックの変更を保存
    ' ThisWorkbook.Save
End Sub

ブックを保存するたびに自動実行する例

このコードは、ブックが保存されるたびにバックアップを実行します。頻繁に保存する方におすすめです。

設定方法: 同様に「ThisWorkbook」のコードウィンドウに以下のコードを貼り付けます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' バックアップ処理を実行
    Call BackupCurrentWorkbookWithTimestamp
    
    ' 通常の保存処理はそのまま実行される
End Sub

注意点: Workbook_BeforeSaveイベントは、ブックを保存するたびに実行されるため、短時間で何度も保存する場合、バックアップファイルが大量に生成される可能性があります。運用には注意してください。

まとめ

Excel VBAを活用することで、現在のブックを日時付きで簡単に自動バックアップする方法を解説しました。

  • ThisWorkbook.SaveCopyAs メソッドで、開いているブックのコピーを安全に作成できる。
  • Format(Now, "yyyymmdd_hhmmss") でファイル名に日時を含めることで、バージョン管理と重複回避が可能。
  • Dir 関数と MkDir 関数で、バックアップフォルダの存在確認と自動作成ができる。
  • Workbook_BeforeClose や Workbook_BeforeSave イベントで、バックアップ処理を自動化できる。

これらのテクニックを導入することで、大切なExcelデータの損失リスクを大幅に減らし、安心して作業に集中できるようになります。ぜひ、ご自身の業務で活用してみてください。

コメント

タイトルとURLをコピーしました