ExcelのVBAで処理開始前のデータ状態を保存しておきたいときのVBAサンプル。
【Excel】VBA実行後に 「元に戻す」はできないので事前対処 にファイルやフォルダのコピー保存のサンプルがあります。
今回はバックアップ用ファイルの内容を既存ファイルに入替のサンプルで、次の動作をします。
- 既存ファイルの有無を確認する。
- バックアップ用ファイルの有無を確認する。
- バックアップ用ファイルがある場合は、メッセージで上書きを確認し、OKなら既存ファイルをバックアップ用ファイルにコピーする。
- 既存ファイルがある場合は、メッセージで上書きを確認し、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 列挙型は次のとおりです。
以上、Excel VBAでバックアップ用ファイルを既存ファイルに入替のVBAサンプルでした。