ファイルのバックアップ簡単確実に実施できるマクロ

タイトルのサンプルマクロです。

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 サブルーチン

  • 機能: 指定されたブックを日付付きで指定のフォルダーにバックアップします。
    1. フォルダーの指定: バックアップ先フォルダー名を "バックアップ用" に設定します。
    2. 日付の追加: 現在の日時を "_yyyymmddhhnn" 形式でフォーマットし、ブック名の末尾に付け加えます。
    3. フォルダーパスの取得: getFolderPathFromBook 関数を使用して、ブックが保存されているフォルダーのパスを取得します。この関数はOneDriveにも対応しており、クラウド上でも適切にパスを取得できます。
    4. フォルダーの作成: バックアップ先のフォルダーが存在しない場合、makeFolder サブルーチンでフォルダーを新規作成します。
    5. ファイル名の決定: Split 関数で拡張子を除いたブック名を取り出し、日付を追加してバックアップファイル名を決定します。マクロが含まれているブックは「.xlsm」、マクロが含まれていないブックは「.xlsx」として保存します。
    6. ブックの複製保存: SaveCopyAs メソッドを使って、指定されたファイルパスにブックを保存します。このメソッドはブックを上書きせずに新規コピーとして保存するため、バックアップに適しています。

3. makeFolder サブルーチン

  • 機能: 指定されたパスにフォルダーが存在しない場合、FileSystemObject を使って新規にフォルダーを作成します。
    1. FileSystemObject の作成: CreateObject("Scripting.FileSystemObject") でファイル操作用のオブジェクトを作成します。
    2. フォルダーの存在チェック: FolderExists メソッドを使って、指定したフォルダーが存在するかどうかを確認します。存在しない場合は CreateFolder メソッドで新規作成します。

このVBAは、ファイルのバックアップを簡単かつ確実に行うための処理を実装しており、特にOneDriveなどクラウドストレージ上のファイルにも対応する仕組みが含まれています。

4. getFolderPathFromBook 関数 以下を参照

参考資料

この記事は、以下を参考にています。感謝いたします。

Follow me!