検索

キーワード


目次

【Excel VBA】ブックを保存するたびにバックアップデータを作成する方法

  • 公開日:2023-06-30 13:52:29
  • 最終更新日:2023-06-29 10:52:54

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

皆さんこんにちは、エンジニアのIMMRです。


例えば下記のようなブックがあったとします。


図1 ブック59

図1 ブック59


このようなブックに日々、一人ひとりが記載して保存をするブックとします。

例えば、このブックを保存ボタンをクリックした度に別の場所にバックアップ用のデータを作成したいとします。


作業としては、その都度、別名で保存とかの作業をするのではなく、

下記の図のように、現物であるブックの保存ボタンを押したら、自動で別名で、別の場所にバックアップデータを作成します。


図2 保存形式

図2 保存形式



1.イベント機能について

何かのデータを入力してからプログラムを実行するのではなく、上書き保存ボタンをクリックした度の実行なのでイベント機能を使用します。

イベント機能については下記、記事でも説明しております。

【Excel VBA】セル内の値が変更された時点で、プログラムを実行する方法

設定方法などについては、上記記事を参照ください。


そして、今回は保存をした後の実行のなのでWorkbook_AfterSave」を使用します。


図3 保存後の実行

図3 保存後の実行


この中にプログラムを記載します。


2.ブックのバックアップ作成について

ブックのバックアップを行うのに必要な情報があります。


①どこに保存するか

今回は下記、フォルダー(C:\バックアップデータ)に作成することにします。


図4 バックアップ用のフォルダー

図4 バックアップ用のフォルダー


②どのような名前にするか

同じ名前だと上書きをしてしますので、毎回名前を変える必要があります。

いろいろ方法はありますが、ここでは、

「元のブック名」+「_」+「保存をした日時(年・月・日・時・分・秒)」

とした名前にしたいと思います。これなら何度行っても名前が重なることはないです。


3.ブックのバックアップ作成(サンプルプログラム)について

下記がサンプルプログラムです。


サンプルプログラム

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

    Dim sa_Path As String, sa_Data As String

    sa_Path = "C:\バックアップデータ"

    sa_Data = Replace(ActiveWorkbook.Name, ".xlsm", "") & "_" & _
              Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)

    Application.EnableEvents = False
        ActiveWorkbook.SaveAs sa_Path & "\" & sa_Data & ".xlsm"
    Application.EnableEvents = True

    Application.Quit

End Sub


では、サンプルプログラムについて解説します。


変数「sa_Path」には、バックアップのデータを保存するパスをセットしています。

変数「sa_Data」には、バックアップデータの名前をセットしています。

         Replaceでは、元のデータ名から拡張子を外しています。ABC.xlsm → ABC

         その後ろに”_”(アンダーバー)を付けています。

         そして、最後に保存ボタンを押した時の年・月・日・時・分・秒をつけています。

ActiveWorkbook.SaveAs で保存

        バックアップを保存するパス + 「sa_Data」で作成したデータ名 + 拡張子

        で別名の保存をするのですが、ここで保存をすると

        保存をした(イベント)ということでWorkbook_AfterSaveの出だし(最初)に戻ってしまいます。

        そうなると無限ループになり、処理が終わらなくなってしまいます。

        そのようにならないためにApplication.EnableEventsを前後に記載しています。

        Application.EnableEventsは、イベントの機能を無効にするためのものです。        

        Falseにすることで、イベント機能を無効にします。

        そして、保存を行います。イベント機能を無効にしているのでイベント機能は発生しません。

        保存が終わったら、Trueにして、イベント機能の無効を解除します。

最後にApplication.Quitを使ってブックを閉じます。


4.ブックのバックアップ作成(サンプルプログラム)の実行

では、実際に実行をしていきたいと思います。

まず、下記のようにバックアップのフォルダーの中には、なにもないです。


図5 バックアップ用のフォルダー(実行前)

図5 バックアップ用のフォルダー(実行前)


では、保存ボタンを押してプログラムを実行してみます。


図6 プログラムの実行

図6 プログラムの実行


保存ボタンを押して実行していますが、ここで重要になってくるのが保存ボタンを押した日時です。

ここでは、2023年6月29日10時11分 に実行しています。

では、バックアップのフォルダーを確認してみます。


図7 バックアップ用のフォルダー(実行後)

図7 バックアップ用のフォルダー(実行後)


「元のブック名」+「2023629101140」という名前で保存されています。

2023629101140」は、202329101140秒ということです。

無事、保存を押した時点の時間でコピーが出来ています。


ブックを保存するたびにバックアップデータを作成することができました。


【著者】

Imamura

「挑戦心」を忘れずに、新しいことにチャレンジしています。 資格:VBAエキスパート Excel VBA(ベーシック/スタンダード) 等

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート

よく読まれている記事