エクセル業務に役立つ!1クリックでバックアップ保存ができるVBA

Left Caption

豆父ちゃん

データ保存する時に自動的にバックアップを取りたい。なんかいい方法はないの?

こんな方のために、簡単にバックアップ保存できるVBAを紹介します。

バックアップ保存VBAとは

エクセルファイルを保存するときは名前をつけて保存、もしくは上書き保存をしている方がほとんどだと思います。

バックアップ保存VBAは1クリックで上書き保存+バックアップフォルダに保存できるシステムです。

このシステムを使って保存をすれば、日頃使っているエクセルファイルが壊れたり消されたりしてもバックアップがあるので安心です。

下記で紹介するサンプルVBAの使い方はバックアップ用フォルダを作成し、そのフォルダの場所を登録するだけ。この設定を1度行うだけで毎回バックアップをとりながらデータ保存が可能になります。

 

バックアップ保存VBAの設定方法

バックアップ保存用のフォルダを作成

適当な場所にフォルダを作成。この作成したフォルダにバックアップ用のデータがどんどん保存されていきます。

 

設定sheetを作成

設定sheetに先程作成したフォルダの場所を指定します。既にあるフォルダに保存したい場合はそのフォルダの場所を指定してください。

バックアップ保存ボタンを作成

ユーザーフォームでボタンを作成し、VBAを登録。実行すると指定したフォルダにエクセルファイルが保存されます。

エクセルファイルがどのように使われているかでVBAの実行方法が異なります。サンプルではユーザーフォームでVBAを実行させていますが、他にも任意のセルをクリックして実行ボタンを作成して実行などいろんな方法があります。

下記の記事ではVBAの実行について詳しく紹介しています。

バックアップVBAをどのように実行方法させればよいか迷っている方は参考にしてみてください。

 

バックアップ保存VBAのサンプル

サンプルVBAをコピーするだけですぐにあなたのエクセルファイルで使うことができます。バックアップ保存しなければならない重要なエクセルファイルへ導入してみましょう。

バックアップ保存VBA【年別更新】

1 Sub 年別バックアップ()
2 Application.ScreenUpdating = False
3 Dim Ash As Worksheet
4 Set Ash = Worksheets(“設定")
5 Dim FName, FPath, BFolder, SaveBackupFolder, SaveFolder As String
6 Dim Ye As Long
7 Ye = Year(Now)
8 FName = ThisWorkbook.Name
9 FPath = ActiveWorkbook.Path
10 BFolder = Ash.Cells(3, 2)
11 If Dir(BFolder, vbDirectory) = “" Then
12 MsgBox “フォルダは存在しません。"
13 Exit Sub
14 End If
15 SaveBackupFolder = BFolder & “\" & “(" & Ye & “年)" & FName
16 SaveFolder = FPath & “\" & FName
17 Application.DisplayAlerts = False
18 ThisWorkbook.SaveAs SaveBackupFolder
19 ThisWorkbook.SaveAs SaveFolder
20 Application.DisplayAlerts = True
21 End Sub

 

バックアップ保存VBA【月別更新】

1 Sub 月別バックアップ()
2 Application.ScreenUpdating = False
3 Dim Ash As Worksheet
4 Set Ash = Worksheets(“設定")
5 Dim FName, FPath, BFolder, SaveBackupFolder, SaveFolder As String
6 Dim Ye, Mo As Long
7 Ye = Year(Now)
8 Mo = Month(Now)
9 FName = ThisWorkbook.Name
10 FPath = ActiveWorkbook.Path
11 BFolder = Ash.Cells(3, 2)
12 If Dir(BFolder, vbDirectory) = “" Then
13 MsgBox “フォルダは存在しません。
14 Exit Sub
15 End If
16 SaveBackupFolder = BFolder & “\" & “(" & Ye & “年" & Mo & “月)" & FName
17 SaveFolder = FPath & “\" & FName
18 Application.DisplayAlerts = False
19 ThisWorkbook.SaveAs SaveBackupFolder
20 ThisWorkbook.SaveAs SaveFolder
21 Application.DisplayAlerts = True
22 End Sub

 

バックアップ保存VBA【日別更新】

1 Sub 日別バックアップ()
2 Application.ScreenUpdating = False
3 Dim Ash As Worksheet
4 Set Ash = Worksheets(“設定")
5 Dim FName, FPath, BFolder, SaveBackupFolder, SaveFolder As String
6 Dim Ye, Mo, Da As Long
7 Ye = Year(Now)
8 Mo = Month(Now)
9 Da = Day(Now)
10 FName = ThisWorkbook.Name
11 FPath = ActiveWorkbook.Path
12 BFolder = Ash.Cells(3, 2)
13 If Dir(BFolder, vbDirectory) = “" Then
14 MsgBox “フォルダは存在しません。"
15 Exit Sub
16 End If
17 SaveBackupFolder = BFolder & “\" & “(" & Ye & “年" & Mo & “月" & Da & “日)" & FName
18 SaveFolder = FPath & “\" & FName
19 Application.DisplayAlerts = False
20 ThisWorkbook.SaveAs SaveBackupFolder
21 ThisWorkbook.SaveAs SaveFolder
22 Application.DisplayAlerts = True
23 End Sub

 

バックアップ保存VBAの実行結果

VBAを実行すると上書き保存されると同時にバックアップフォルダに保存されます。

保存されるファイルの名前は、(日付)エクセルファイル名となります。エクセルファイル名に日付を付け加えることでいつ更新されたのか一目で判別できるようになります。サンプルでは更新頻度が異なるバックアップVBAを3つ紹介しています。

 

年間更新のバックアップ保存VBA

→(2020年)エクセルファイル名

 

月間更新のバックアップ保存VBA

→(2020年9月)エクセルファイル名

 

日付毎更新のバックアップ保存VBA

→(2020年9月24日)エクセルファイル名

既にあるエクセルファイルの名前とバックアップとして保存するエクセルファイルの名前が同じ場合は上書き保存。違った場所は名前をつけて保存。という結果になります。
 

バックアップ保存VBAの使い方

バックアップ保存VBAは重要なエクセルファイルに導入しましょう。

重要で使用頻度が高いエクセルファイルには日付毎にバックアップをするVBAを、重要だけど使用頻度が少ないエクセルファイルには年間毎にバックアップをするVBAを導入するようにしましょう。

例えば、

年間カレンダーとして使っているエクセルファイルは年別更新、週間カレンダーとして使っているエクセルファイルは日別更新!

といったように選定します。

このようにバックアップをする頻度の選定をすることで、バックアップファイルが作られてすぎてデータ容量を占有してしまう!ということがなくなります。