【Excel VBA】ブックを保存する3つの方法(Save/SaveAs/SaveCopyAs)の違いと使い分け

VBAでブックへの処理が完了したら、最後は必ず「保存」の操作が必要になります。しかし、VBAには.Save.SaveAs.SaveCopyAsという3つの似たような保存メソッドがあり、これらの違いを正確に理解しないと、意図せず重要なファイルを上書きしてしまうなどの事故につながりかねません。

この記事では、3つの保存メソッドそれぞれの役割と、どのような場面でどれを使うべきかを、明確に解説します。


目次

1. 上書き保存する (.Save)

.Saveは最もシンプルな保存方法で、現在開いているブックに対して単純な上書き保存を行います。ユーザーが手作業で Ctrl + S を押したり、フロッピーディスクのアイコンをクリックしたりするのと同じ操作です。

コード例

Sub OverwriteSave()
    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    ' ブックが一度も保存されていない場合はエラーになるため、パスの有無でチェック
    If targetBook.Path <> "" Then
        targetBook.Save
        MsgBox "ブック「" & targetBook.Name & "」を上書き保存しました。"
    Else
        MsgBox "このブックはまだ保存されていません。「名前を付けて保存」を使用してください。", vbExclamation
    End If
End Sub

✓ ポイント: このメソッドは、既にファイルとして存在しているブックに対してのみ有効です。新規作成したばかりの未保存のブック(”Book1″など)に対して実行すると、エラーになります。


2. 名前を付けて保存する (.SaveAs)

.SaveAsは、ブックを新しい名前や異なる場所、または異なる形式で保存するメソッドです。手作業の「名前を付けて保存」に相当します。

コード例

Sub SaveAsNewName()
    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    Dim newFilePath As String
    ' このExcelファイルと同じフォルダに、別名で保存するパスを作成
    newFilePath = ThisWorkbook.Path & "\Report_FinalVersion.xlsx"
    
    ' 名前を付けて保存
    targetBook.SaveAs Filename:=newFilePath
    
    ' SaveAs実行後、VBAの操作対象は新しいブックに切り替わっています
    MsgBox "「" & ActiveWorkbook.Name & "」として新しく保存しました。"
End Sub

✓ 最重要ポイント: .SaveAsを実行すると、それ以降のVBAの操作対象は、新しく保存されたブックに切り替わります。元のファイルは(変更がなければ)そのまま閉じられた状態になり、VBAの制御は新しいファイルに移ります。


3. コピーを保存する (.SaveCopyAs)

.SaveCopyAsは、現在のブックのコピーを別の名前で保存します。バックアップやスナップショットを作成するのに便利なメソッドです。

コード例

Sub SaveACopy()
    Dim targetBook As Workbook
    Set targetBook = ActiveWorkbook
    
    ' 元のファイル名に日付を追加した、バックアップ用のファイルパスを作成
    Dim backupFilePath As String
    backupFilePath = Replace(targetBook.FullName, ".xls", "_" & Format(Date, "yyyymmdd") & ".xls")

    ' コピーを保存
    targetBook.SaveCopyAs Filename:=backupFilePath
    
    ' SaveCopyAsを実行しても、操作対象は元のブックのままです
    MsgBox "「" & backupFilePath & "」にバックアップコピーを保存しました。" & vbCrLf & _
           "引き続き「" & ActiveWorkbook.Name & "」を編集中です。"
End Sub

✓ 最重要ポイント: .SaveAsとの決定的な違いは、.SaveCopyAsを実行しても、VBAの操作対象は元のブックのまま変わらないという点です。元のブックを開いたまま作業を続けつつ、途中の状態を別のファイルとして保存したい場合に最適です。


まとめ:3つの保存方法の使い分け

3つのメソッドの違いを理解し、目的に応じて正しく使い分けることが重要です。

メソッド動作の概要実行後の操作対象主な用途
.Save既存のファイルに上書き保存変わらない(元のブック)処理の途中で進捗を保存する。
.SaveAs別名で保存新しいブックに切り替わる処理結果を最終版として別ファイルで保存する。
.SaveCopyAsコピーを別名で保存変わらない(元のブック)処理の途中でバックアップやスナップショットを作成する。

Google スプレッドシートにエクスポート

この違いを意識することで、より安全で意図通りのファイル操作を行うマクロを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次