【Excel VBA】バックアップファイル(ファイル名に日付つき)を保存するマクロ

Excel VBA ファイル名に日付つきのバックアップファイル作成

Excelを使っていると、間違って保存してしまって「あのときの状態に戻したい…」となることよくありますよね。

今回はその悩みを解消するために、Excelを保存したときに自動でバックアップを作成するマクロを作りました。

Excel保存時にバックアップ(ファイル名に日付つき)を保存するマクロ

1. VBAのソースコードを書く

ソースコードを書いていきましょう。

ポイントはファイル名に日付を付けるところ、文字列の検索と切り出しを組み合わせて使うことで実現しています。詳しい説明は以下の記事を参考にしてください。

Excel VBA 文字列の切り出し・検索方法【Excel VBA】文字列の切り出し・検索の方法
たけのこ
右上の”copy”をクリックしたらソースをコピーできますよ!

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ファイルを保存します。本記事では以下のフォルダに保存します。

ファイル保存場所
C:\Users\Public\Documents\VBA

SaveBackupメソッドが正しく動作するか確認しましょう。キーボードの【F5】を押す、または画面上部の【▶】を押して、マクロを実行します。

backupフォルダが作成されて、その下にファイルが保存されていることを確認します。

3. 保存したときのイベントにマクロを登録する

次に、Excelを保存するときに、上記で作ったマクロが実行されるようにします。

プロジェクトの中にある、【ThisWorkbook】をダブルクリックしましょう。

ThisWorkbookをダブルクリックする

次に、(General)と書いてあるプルダウンをクリックして、【Workbook】を選択しましょう。

GeneralからWorkbookをクリック

【Workbook】を選択すると、以下のようにWorkbook_Openが勝手に書かれますが、とりあえず無視してください。

右側のプルダウンをクリックして、【BeforeSave】を選択しましょう。

BeforeSaveをクリック

すると、Workbook_BeforeSaveが自動的に書かれます。

このなかに処理を書くと、保存する前に処理が自動的に実行されるようになります。

また、今回はWorkbook_Open()は不要なので消しておきます(以下の図では消去済み)。

Call メソッド名 で処理を呼び出すことが出来ます。

4. マクロを実行する

上記でファイルを保存したときのイベントに、SaveBackupメソッドを登録したので、ファイルを保存して、バックアップファイルが保存されていることを確認します。

「2. マクロの確認」で保存したファイルと別のファイルが保存されていることが確認できます。

これで完了です!

 

↓ おすすめの書籍です!