エクセル終了時に自動でバックアップファイル(Excel)を作成(VBA)

ExcelVBA

・きっかけ

先日、取引先のご担当者から、緊急で確認したいことがあると連絡をいただきました。「複数の担当者で使用しているエクセルファイル(共有フォルダに保存されていて日々利用しているエクセルファイル)を削除してしまったが復旧方法はあるか?」との問い合わせでした。電話を受けたとき「確か共有はNASに保存していたから共有の情報を削除したら復旧は無理だろう」と思いながら重い足取りで直接現地に訪問し確認したところ、保存していたNASにバックアップ(NASを導入してくれた業者様が設定してくれたとのこと)があったので何とか復旧はできたのですが、バックアップが2日前(曜日設定)のデータだったため消失した2日分は再入力をすることになりました。連絡をいただいたご担当者は2日分でも入力が大変とのことで今後このような事態に備えて、対象エクセルを終了時に自動で現在の状態ファイルを別の場所に保存したいとの提案をしたときの実体験を記事にいたしましたので、同じような状況でお悩みの方にすこしでもお役に立てれば幸いです。

・今回のVBAではこんなことができます

・エクセル終了時に自動でバックアップ(エクセル終了時のファイルを指定した場所に保存する)

・エクセルを操作したユーザーが確認できます。

・こんな方におすすめです

・日々、使用しているエクセルのデータが消失してしまうと復旧に時間が取られる方。

・複数人で使用しているエクセルファイルで終了した担当(ユーザー名)を記録としてファイル名に残しておきたい方。(ちょっとマニアック(笑)かもしれませんが記録としてはとても大事です)

・今までデータ消失のトラブルが発生したことがないけど前もって備えておきたい方。

・バックアップについて高度な技術はわからないけど、エクセル終了時に自動でバックアップが保存されることで少しでも安心が得られる方(※エラーなどの可能性も含め、保存されているバックアップデータは定期的に確認して下さい)

・今回使用するコードの説明

構文①(アクティブブックを名前を変えて保存)
ActiveWorkbook.SaveAs Filename:= “保存したいフォルダ\バックアップファイル名.xlsm”

構文②(ログインしているユーザを取得する)
Environ(“USERNAME”)

・コードの入力する場所

ThisWorkbook内に下記を入力
入力場所の開き方はExcelタブの「開発」→「Visual Basic」→「ThisWorkbook」

・コードの入力例

Private Sub Workbook_BeforeClose(Cancel As Boolean)

ActiveWorkbook.Save

Dim fName As String
Dim fPath As String
Dim fNameS As String

'ファイル名
fName = ActiveWorkbook.Name
'ファイルパス(※保存したい場所に直接指定も可能)
fPath = ActiveWorkbook.Path
'拡張子は含まない(-5は「.xlsm」の5文字)
fNameS = Left(fName, Len(fName) - 5)

'ファイルの保存(ファイル名:現ファイル名に年月日、時間、分)
ActiveWorkbook.SaveAs Filename:=fPath & "\" & fNameS & "_" & Format(Now, "yymmddhhnn") & ".xlsm"

End Sub

・複数で利用している場合、保存したユーザー名もファイル名に付けたい場合(上記入力に追加)

Dim uName As String
uName = Environ("USERNAME")

'※上記コード17行目以降に追加
'ファイルの保存(ファイル名:現ファイル名に年月日、時間、分、ユーザー名)
ActiveWorkbook.SaveAs Filename:=fPath & "\" & fNameS & "_" & Format(Now, "yymmddhhnn") & uName & ".xlsm"

・入力例を使った場合で運用した際の注意

入力例を使用した場合ですが、ファイルを閉じるたびにバックアップが作成されるので、定期的に不要なファイルを確認し、削除が必要になりますのでご注意ください。
また、可能であればバックアップ先は自身のパソコンではなくサーバーなどの故障しにくい別の場所を選択した方が、リスク分散になります。

Excelの機能でバックアップファイルを作成する場合(VBA以外で対応したい場合)

VBAコードの入力が不安だったり、それ以外で対応したい場合のバックアップの方法として、Excelの機能でのバックアップがあります。(Excel2019)

バックアップをしたい対象ファイルの「ファイル」タブをクリックし「名前をつけて保存」を選択します。

名前を付けて保存のダイアログが表示されたら「ツール」をクリックし「全般オプション」を選択します。

全般オプションのダイアログが表示されたら「バックアップファイルを作成する」にチェックをしてOKします。

この設定をしておくと上書き保存をしたさいにバックアップが行われます。
※バックアップファイルは「.xlk」形式で保存されております。

・まとめ

同じことの繰り返しで本当に申し訳ございません。記事をお読みいただいた方、今回の依頼をいただいた担当者様には伝わっていると思いますが、大事なことでしたのでしつこいくらいに繰り返しの説明をさせていただきます。終了するたびにファイルが作成されるので定期的又は日々確認をしていただき、不要なものは削除するようにお願いいたします。話を戻しますと依頼をいただいたお客様にはこれをきっかけにバックアップも含め運用を見直していただき何か起きた時でもすぐに復旧できる体制にしておきたいものです。できればバックアップファイルの保存先は操作しているパソコンではなく、別のサーバーなどにしたほうが利用端末に故障などのトラブル時も別で稼働しているパソコンからファイルを開くことができるので、その点も注意していただければと思います。
最後にですが、この記事を通して新しいアイディアが生まれたり、VBAに興味を持っていただけたら幸いです。
ここまでご覧いただき、誠にありがとうございます。

ご注意


・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
 Excel2021、2019、2016

コメント