Excelを使っていると、間違って保存してしまって「あのときの状態に戻したい…」となることよくありますよね。
今回はその悩みを解消するために、Excelを保存したときに自動でバックアップを作成するマクロを作りました。
Excel保存時にバックアップ(ファイル名に日付つき)を保存するマクロ
1. VBAのソースコードを書く
ソースコードを書いていきましょう。
ポイントはファイル名に日付を付けるところ、文字列の検索と切り出しを組み合わせて使うことで実現しています。詳しい説明は以下の記事を参考にしてください。


copy
Sub SaveBackup()
Dim backupFileName, backupFilePath As String
Dim folderName As String
' このファイルが保存してあるフォルダ直下の、backupフォルダを指定する
backupFolderPath = ThisWorkbook.Path & "\backup"
'同名のフォルダがない場合フォルダを作成する
If Dir(backupFolderPath, vbDirectory) = "" Then
MkDir backupFolderPath
End If
' ファイル名=このファイル名+年月日時分秒(yyyymmddhhmmss)とする
' ファイルの拡張子を取る
backupFileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1)
' ファイル名に日付を付ける
backupFileName = backupFileName & "_" & Format(Now, "yyyymmddhhmmss") & ".xlsx"
' ファイルを保存するパス
backupFilePath = backupFolderPath & "\" & backupFileName
' ファイルを保存する
ActiveWorkbook.SaveCopyAs backupFilePath
End Sub
2. マクロの確認
ここでExcelファイルを保存します。本記事では以下のフォルダに保存します。
SaveBackupメソッドが正しく動作するか確認しましょう。キーボードの【F5】を押す、または画面上部の【▶】を押して、マクロを実行します。
backupフォルダが作成されて、その下にファイルが保存されていることを確認します。
3. 保存したときのイベントにマクロを登録する
次に、Excelを保存するときに、上記で作ったマクロが実行されるようにします。
プロジェクトの中にある、【ThisWorkbook】をダブルクリックしましょう。
次に、(General)と書いてあるプルダウンをクリックして、【Workbook】を選択しましょう。
【Workbook】を選択すると、以下のようにWorkbook_Openが勝手に書かれますが、とりあえず無視してください。
右側のプルダウンをクリックして、【BeforeSave】を選択しましょう。
すると、Workbook_BeforeSaveが自動的に書かれます。
このなかに処理を書くと、保存する前に処理が自動的に実行されるようになります。
また、今回はWorkbook_Open()は不要なので消しておきます(以下の図では消去済み)。
Call メソッド名 で処理を呼び出すことが出来ます。
4. マクロを実行する
上記でファイルを保存したときのイベントに、SaveBackupメソッドを登録したので、ファイルを保存して、バックアップファイルが保存されていることを確認します。
「2. マクロの確認」で保存したファイルと別のファイルが保存されていることが確認できます。
これで完了です!
↓ おすすめの書籍です!