VBAでファイルを保存する際、既に同名のファイルが存在すると自動的に上書きされてしまうことがあります。
大事なデータを誤って消さないように、保存前にファイルの存在を確認する仕組みを入れておくのがおすすめです。
1. 基本的な存在チェックの流れ
- 保存先のパスとファイル名を変数で設定
Dir
関数で同名ファイルが存在するか確認- 存在する場合は警告を表示して保存を中止
- 存在しない場合のみ保存を実行
2. サンプルコード
Sub SaveWorkbookWithoutOverwrite()
Dim savePath As String
savePath = "C:\TestFolder\Report.xlsx" '保存先とファイル名
'ファイルの存在確認
If Dir(savePath) <> "" Then
MsgBox "同名のファイルが既に存在します。保存を中止します。", vbExclamation
Exit Sub
End If
'上書き防止が確認できたら保存
ThisWorkbook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
MsgBox "保存が完了しました。", vbInformation
End Sub
3. コード詳細解説
savePath
保存先のフルパスを文字列として指定しますC:\
から始める絶対パスで指定するのが確実ですDir(savePath)
指定したパスにファイルが存在する場合はファイル名を返し、存在しない場合は空文字を返しますIf Dir(savePath) <> "" Then
同名ファイルがある場合の処理を条件分岐ThisWorkbook.SaveAs
このマクロが入っているブックを保存しますFileFormat:=xlOpenXMLWorkbook
はマクロなしの.xlsx
形式で保存する指定です
(マクロ付きで保存する場合はxlOpenXMLWorkbookMacroEnabled
を使用)
4. 実務での応用ポイント
- 日時をファイル名に付ける
上書きを避ける最も確実な方法は、保存時にReport_2025-08-14.xlsx
のように日付や時刻を付加することです - ユーザーに保存先を選ばせる
Application.GetSaveAsFilename
を使って、ユーザーが保存先を選べるようにすると安全性が高まります - 上書き確認メッセージをカスタマイズ
「本当に上書きしますか?」というYes/Noメッセージにして、Yesの場合のみ保存するようにすれば誤操作を防げます
コメント