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 スプレッドシートにエクスポート
この違いを意識することで、より安全で意図通りのファイル操作を行うマクロを作成することができます。