ファイルのバックアップ簡単確実に実施できるマクロ
タイトルのサンプルマクロです。
Private Sub sample()
' 現在のブックを日付付きでバックアップするサブルーチンを呼び出す
datedBackupToFolder ThisWorkbook
End Sub
'*******************************
'* 指定フォルダーに日付入りでバックアップ。OneDriveにも対応。
'* wb:開いているWorkbook(対象のブック)を指定
Sub datedBackupToFolder(ByVal wb As Workbook)
Dim backupPath As String ' バックアップ先のフルパスを格納する変数
Dim folderName As String ' バックアップ用フォルダーの名前を格納
Dim suffix As String ' バックアップファイル名に付加する日付の文字列
' バックアップ先フォルダーの名前を指定
folderName = "バックアップ用"
' 日付をフォーマットして、バックアップファイル名の末尾に追加する文字列を作成
' フォーマット例:"_202410071530"(YYYYMMDDHHNN形式)
suffix = Format(Now, "_yyyymmddhhnn")
' バックアップフォルダーのフルパスを取得する
backupPath = getFolderPathFromBook(wb) & "\" & folderName
' 指定されたパスにフォルダーがない場合は作成する処理
backup.makeFolder backupPath
' バックアップファイルのフルパスを作成する
' ブック名の拡張子を除いた部分に日付を追加して、保存ファイル名を作成
backupPath = backupPath & "\" & Split(wb.Name, ".")(0) & suffix
' マクロが含まれるブックの場合は「.xlsm」、含まれない場合は「.xlsx」として保存
If wb.HasVBProject = True Then
' マクロが含まれている場合
backupPath = backupPath & ".xlsm"
Else
' マクロが含まれていない場合
backupPath = backupPath & ".xlsx"
End If
' ブックを指定されたパスに「コピー保存」する
' SaveCopyAs メソッドは元のブックを上書きせずに複製保存する
wb.SaveCopyAs backupPath
End Sub
'*******************************
'* 指定されたパスにフォルダーを作成する
'* path:作成するフォルダーのフルパスを指定
Sub makeFolder(path As String)
Dim fso As Object ' FileSystemObjectを操作するためのオブジェクトを宣言
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定されたパスにフォルダーが存在しない場合は、新しくフォルダーを作成する
If Not fso.FolderExists(path) Then
fso.CreateFolder path
End If
End Sub
詳しい解説
1. sample
サブルーチン
- 機能:
ThisWorkbook
(現在のブック)を引数として、datedBackupToFolder
サブルーチンを呼び出します。このサブルーチンは、バックアップの処理を担当します。
2. datedBackupToFolder
サブルーチン
- 機能: 指定されたブックを日付付きで指定のフォルダーにバックアップします。
- フォルダーの指定: バックアップ先フォルダー名を
"バックアップ用"
に設定します。 - 日付の追加: 現在の日時を
"_yyyymmddhhnn"
形式でフォーマットし、ブック名の末尾に付け加えます。 - フォルダーパスの取得:
getFolderPathFromBook
関数を使用して、ブックが保存されているフォルダーのパスを取得します。この関数はOneDriveにも対応しており、クラウド上でも適切にパスを取得できます。 - フォルダーの作成: バックアップ先のフォルダーが存在しない場合、
makeFolder
サブルーチンでフォルダーを新規作成します。 - ファイル名の決定:
Split
関数で拡張子を除いたブック名を取り出し、日付を追加してバックアップファイル名を決定します。マクロが含まれているブックは「.xlsm
」、マクロが含まれていないブックは「.xlsx
」として保存します。 - ブックの複製保存:
SaveCopyAs
メソッドを使って、指定されたファイルパスにブックを保存します。このメソッドはブックを上書きせずに新規コピーとして保存するため、バックアップに適しています。
- フォルダーの指定: バックアップ先フォルダー名を
3. makeFolder
サブルーチン
- 機能: 指定されたパスにフォルダーが存在しない場合、
FileSystemObject
を使って新規にフォルダーを作成します。FileSystemObject
の作成:CreateObject("Scripting.FileSystemObject")
でファイル操作用のオブジェクトを作成します。- フォルダーの存在チェック:
FolderExists
メソッドを使って、指定したフォルダーが存在するかどうかを確認します。存在しない場合はCreateFolder
メソッドで新規作成します。
このVBAは、ファイルのバックアップを簡単かつ確実に行うための処理を実装しており、特にOneDriveなどクラウドストレージ上のファイルにも対応する仕組みが含まれています。
4. getFolderPathFromBook
関数 以下を参照
参考資料
この記事は、以下を参考にています。感謝いたします。