【VBA】保存前に既存ファイルの上書きを防ぐ方法

VBAでファイルを保存する際、既に同名のファイルが存在すると自動的に上書きされてしまうことがあります。
大事なデータを誤って消さないように、保存前にファイルの存在を確認する仕組みを入れておくのがおすすめです。


1. 基本的な存在チェックの流れ

  1. 保存先のパスとファイル名を変数で設定
  2. Dir 関数で同名ファイルが存在するか確認
  3. 存在する場合は警告を表示して保存を中止
  4. 存在しない場合のみ保存を実行

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の場合のみ保存するようにすれば誤操作を防げます

コメント

タイトルとURLをコピーしました