shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】バックアップ用ファイルを既存ファイルに入替サンプル

ExcelのVBAで処理開始前のデータ状態を保存しておきたいときのVBAサンプル。

【Excel】VBA実行後に 「元に戻す」はできないので事前対処 にファイルやフォルダのコピー保存のサンプルがあります。

今回はバックアップ用ファイルの内容を既存ファイルに入替のサンプルで、次の動作をします。

  1. 既存ファイルの有無を確認する。
  2. バックアップ用ファイルの有無を確認する。
  3. バックアップ用ファイルがある場合は、メッセージで上書きを確認し、OKなら既存ファイルをバックアップ用ファイルにコピーする。
  4. 既存ファイルがある場合は、メッセージで上書きを確認し、OKなら新規ブックで上書保存する。

VBAサンプル

一つのSubプロシージャではなく、VBAのパーツ化の事例で「メイン」から「バックアップ用ファイルを既存ファイルに入替」を呼び出すサンプルです。

「設定」シートを準備し、ファイルのフルパス情報がセルに入力してあります。

Sub メイン()
    Dim フルパス名 As String
    Dim バックアップ用フルパス名 As String
    フルパス名 = ThisWorkbook.Sheets("設定").Cells(2, 2).Value '既存データ'
    バックアップ用フルパス名 = ThisWorkbook.Sheets("設定").Cells(3, 2).Value 'バックアップデータ'
    Call バックアップ用ファイルを既存ファイルに入替(フルパス名, バックアップ用フルパス名)
End Sub

Function バックアップ用ファイルを既存ファイルに入替(既存のフルパス名 As String, バックアップ用フルパス名 As String)

    Dim 既存ファイルの上書確認 As VbMsgBoxResult
    Dim バックアップの上書確認 As VbMsgBoxResult
    Dim 新規ブック As Workbook
    
    '処理内容を確認'
    If Dir(既存のフルパス名) <> "" Then
        '既存ファイルがある場合、バックアップファイルの状況確認'
        If Dir(バックアップ用フルパス名) <> "" Then
            バックアップの上書確認 = MsgBox("バックアップ用ファイルの内容を既存のファイルで上書しますか?", vbYesNo + vbQuestion)
        Else
            バックアップの上書確認 = vbYes 'バックアップ用ファイルがないので保存OKにする'
        End If
        
        'バックアップ用ファイルの上書OK(バックアップ用ファイルなし含む)なら既存ファイルをコピー'
        If バックアップの上書確認 = vbYes Then
            FileCopy 既存のフルパス名, バックアップ用フルパス名 'バックアップ用にコピー'
            MsgBox "バックアップ用ファイルの上書が完了しました"
        End If

        既存ファイルの上書確認 = MsgBox("既存ファイルを新規ブックで上書していいですか?", vbYesNo + vbQuestion)
    Else
        既存ファイルの上書確認 = vbYes '既存ファイルがないので保存OKにする'
    End If
        
    '既存ファイルの上書OK(既存ファイルなし含む)なら新規保存'
    If 既存ファイルの上書確認 = vbYes Then
        Application.DisplayAlerts = False
        Set 新規ブック = Workbooks.Add
        新規ブック.SaveAs Filename:=既存のフルパス名
        Application.DisplayAlerts = True
        '(ファイルを開いたまま)'
    End If
               
End Function

事例の補足説明

  • ファイルの状態が、「バックアップ用ファイル」、「既存ファイル」の有無で、分岐処理しています。分岐のパターンは次のとおりです。
    既存ファイル バックアップ用
    ファイル
    バックアップの
    上書確認
    既存ファイルの
    上書確認
    あり あり YES YES
    NO
    NO YES
    NO
    なし (YES) YES
    NO
        なし あり (NO) (YES)
    なし
    *上記で、括弧内はメッセージボックスで確認せず設定している。

  • VbMsgBoxResult 列挙型は次のとおりです。

    learn.microsoft.com

以上、Excel VBAでバックアップ用ファイルを既存ファイルに入替のVBAサンプルでした。