【Excel VBA】バックアップを取るマクロ

当ページのリンクには広告が含まれている可能性があります。
バックアップをとるマクロ

こんにちは、ユーキです。

今回は、バックアップを取るマクロについて紹介します。

Excelは1つ前のファイルをバックアップする機能もありますが、1世代しか保存してくれません。バックアップを取るマクロを自分で作ってみたいと思います。

目次

バックアップ機能作成

バックアップを取るといっても難しいことは行いません。保存する直前に、編集中のブックをコピーするだけです。

では、コードを書いてみましょう。

保存時処理

まず、保存前イベントに処理を追加します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    '処理を追加
End Sub

ファイルをコピー

ファイルのコピーには、Scripting.FileSystemObjectオブジェクトのCopyFileメソッドを使用します。

CopyFileメソッドは、対象ファイルと、コピー先を指定します。

対象ファイルは、「ThisWorkbook.Path & “\” & ThisWorkbook.Name」で取得可能です。

コピー先の指定は、対象ファイルのサブフォルダ「backup」フォルダとします。
注意:コピー先のフォルダはあらかじめ作成しておく前提となります。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, ThisWorkbook.Path & "\backup\"
End Sub

コピー先のファイル名変更

上記の処理だと、1世代しか保存できないので、保存先のファイルに日付をつけたいと思います。

末尾に日付をつけるのであれば簡単ですが、それだと使い勝手が悪いので、拡張子の前に日付を入れるようにします。拡張子なしのファイル名と、ファイルの拡張子と、日付を取得します。

    '拡張子なしのファイル名取得
    Dim fileNm As String
    fileNm = fso.GetBaseName(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
    'ファイルの拡張子
    Dim extName As String
    extName = fso.GetExtensionName(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
    
    '日付文字列
    Dim timeTx As String
    timeTx = Format(Now(), "yyyyMMddhhnnss")

完成コード

上記のコードを組み合わせると、以下になります。

これで保存する度に、編集前のファイルをbackupフォルダに保存できるようになりました。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    '拡張子なしのファイル名取得
    Dim fileNm As String
    fileNm = fso.GetBaseName(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
    'ファイルの拡張子
    Dim extName As String
    extName = fso.GetExtensionName(ThisWorkbook.Path & "\" & ThisWorkbook.Name)
    '日付文字列 年月日時分秒を取得
    Dim timeTx As String
    timeTx = Format(Now(), "yyyyMMddhhnnss")
    fso.CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, ThisWorkbook.Path & "\backup\" & fileNm & "_" & timeTx & "." & extName
End Sub

動作確認

それでは作成したマクロを動かしてみましょう。

まずは先ほど作ったマクロがあるブックを起動します。今回は、「バックアップマクロファイル.xlsm」というファイルになります。

バックアップマクロのファイル名確認

バックアップフォルダの中には、何もないことを確認します。

実行前バックアップフォルダの状態確認

開いたファイルを編集し、保存します。

何もなかったフォルダに、ファイルが作成されています。

ファイルは、ファイル名+日付で作成れていることが確認できます。

注意点

このマクロを含んだファイルを使っていくうえで、気を付けなければならないことがあります。

それは、際限なくファイルを作り続けてしまうことです。保存の度に新しいファイルが作成されてしまうので、使い続けるほどにバックアップフォルダにはファイルが増えていきます。

一定期間で削除をする必要があります。この方法については別の機会に紹介できればと思います。

まとめ

今回は、バックアップを取るマクロを作成する方法について紹介しました。

バックアップを取るマクロ
  • 保存時にファイルをコピーする
  • 複数世代保存できるようにするため、バックアップファイルには末尾に日付を付ける
  • 保存フォルダには際限なくファイルがコピーされるので、扱いに注意が必要
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次