Excel VBAでは、SaveAs
メソッドを使うことで、ブックに新しい名前を付けて保存することができます。
特に、新規作成したブックや既存ブックのバックアップを別名で保存したい場合に便利です。
ここでは、名前を付けて保存する基本方法と応用例を解説します。
1. 名前を付けて保存する基本コード
Sub SaveWorkbookAs()
'アクティブブックを別名で保存
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\NewFile.xlsx"
End Sub
ポイント
ThisWorkbook.Path
は、マクロブックが保存されているフォルダのパスを返します。- 保存先フォルダを指定する場合は、
C:\フォルダ名\NewFile.xlsx
のようにフルパスで指定します。
2. 保存ダイアログを表示して名前を付ける
ユーザーに保存先とファイル名を選ばせるには、Application.GetSaveAsFilename
を使います。
Sub SaveWorkbookAsWithDialog()
Dim savePath As Variant
savePath = Application.GetSaveAsFilename( _
InitialFileName:="新しいブック.xlsx", _
FileFilter:="Excelブック (*.xlsx), *.xlsx")
If savePath <> False Then
ActiveWorkbook.SaveAs savePath
MsgBox "ファイルを保存しました:" & savePath
Else
MsgBox "キャンセルされました。"
End If
End Sub
3. 上書き防止として別名保存する例
既存ファイルに直接上書きするのではなく、日時付きで別名保存する方法もよく使われます。
Sub SaveWorkbookWithTimestamp()
Dim fileName As String
fileName = "Report_" & Format(Now, "yyyymmdd_HHMMSS") & ".xlsx"
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & fileName
MsgBox "ファイルを保存しました:" & fileName
End Sub
4. 保存前にブックの状態を確認する
保存前に、既にブックが保存済みかどうかを確認して処理を分ける例です。
Sub SaveAsCheck()
'アクティブブックが存在して(保存されて)いるかを確認
If ActiveWorkbook.Path = "" Then
'未保存(新規作成ブックなど)
ActiveWorkbook.SaveAs "C:\Users\Public\NewBook.xlsx"
Else
MsgBox "既に保存されているブックです:" & ActiveWorkbook.FullName
End If
End Sub
5. まとめ
SaveAs
で新しい名前・場所にブックを保存できるApplication.GetSaveAsFilename
を使えば、ユーザーが保存先を指定できる- タイムスタンプ付きのファイル名で上書きを防ぐ方法が便利
コメント