
マクロでエクセルファイルを操作しているんだけど、
最後に上書き保存するのがなんだか不安…。
別名保存(名前をつけて保存)することはできないの?

なるほど…。
書き換えたデータを上書き保存するのはちょっと心配ですよね…。
では今回は、「VBAで別名保存(名前をつけて保存)する方法」を
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
エクセルファイルをVBAで別名保存(名前をつけて保存)する方法
「SaveAs」を使います。
まずは実行見本をどうぞ。
実行見本
ひとまず全コードと実行結果をご覧ください。
解説は後ほど行います。
全コード
Sub 名前を付けて保存()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
wb.SaveAs "C:\Utatane\test01.xlsx"
wb.Close
End Sub
実行結果

解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
プロシージャの作成
Sub 名前を付けて保存()
End Sub
プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。
変数の宣言
Dim wb As Workbook
上記コードにて、以降使用する変数の宣言を行っております。
変数や宣言についての詳しい解説は、下記記事をご参考ください。
ファイルを開く
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
上記コードにて、操作するエクセルファイルを開いております。
今回の別名保存(名前をつけて保存)には直接関係しませんが、下記記事で解説しておりますので、ご参考ください。
名前をつけて保存
wb.SaveAs "C:\Utatane\test01.xlsx"
wb.Close
コードの4行目にて、「名前をつけて保存」を実行しております。
【 ブックが入った変数.SaveAs “保存するフォルダパス\ファイル名” 】
ブックが入った変数に続けて「.SaveAs」を書いたら、半角スペースを書きます。
「SaveAs」は大文字と小文字が混在しているため、注意してください。
半角スペースの後ろに「保存するフォルダパス」と「ファイル名」を書いて完了です。
「保存するフォルダパス & ファイル名」は「”(ダブルクォーテーション)」で囲ってください。
今回は、「Cドライブ」の「Utatane」フォルダの中に「test01.xlsx」というファイル名で保存した場合の例です。
コードの5行目は、ブックを閉じる記述です。忘れず書きましょう。
マクロが完成したら、実行して動作を確認してみましょう。

エクセル内に作成した自作のボタンを押してマクロを実行させることも可能です。
ボタンの作り方は、下記記事でわかりやすく解説しております。
名前をつけて保存する場合の注意点
- パスの指定間違いに注意
- 同じ場所に同じ名前のファイルが既に存在すると…
今回は、上記の2つを解説いたします。
パスの指定間違いに注意
前項の例で指定したパスを再度表示します。
wb.SaveAs "C:\Utatane\test01.xlsx"
これを下記のように間違えた場合はどうなるのでしょうか?
wb.SaveAs "C:\Utataneeeee\test01.xlsx"
「Utataneeeee」というフォルダは存在しません。
では実行してみましょう。

上記のようなエラーが発生しました。
保存先のフォルダ名を間違えたため、存在しないフォルダを指定したとみなされたようです。
フォルダ名は実際のフォルダを開き、アドレスバーからコピペするのが無難です。

同じ場所に同じ名前のファイルが既に存在すると…

現在、上図のように「Utatane」フォルダに、「test01.xlsx」というファイルが既に存在する状態です。
そこで、下記コードを実行してみます。
Sub 名前を付けて保存()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
wb.SaveAs "C:\Utatane\test01.xlsx"
wb.Close
End Sub

確認のダイアログが表示されました。
「はい」を選択すると、上書き保存されてしまうため、注意してください。
上書きされても大丈夫な場合もあるかと思います。
その場合、いちいちダイアログが表示されて選択するのもめんどうですよね…。
そんなときは、下記のようにコードを改良してください。
Sub 名前を付けて保存_上書きダイアログスキップ()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
Application.DisplayAlerts = False ' 確認ダイアログを非表示
wb.SaveAs "C:\Utatane\test01.xlsx"
Application.DisplayAlerts = True ' 確認ダイアログを表示に戻す
wb.Close
End Sub
4行目と6行目が追加されています。
これで、確認のダイアログは表示されなくなります。
しかしながら、問答無用で上書き保存されてしまうため、注意してください。
6行目で設定を戻す(ダイアログを非表示→表示に戻す)のを忘れないようにしましょう。
この一行を書かないと、以降確認ダイアログが表示されなってしまいます。
いろいろな方法(名前をつけて保存)
保存先・ファイル名を都度指定
保存先のフォルダや保存するファイル名が決まってはいないけれど、名前をつけて保存したい場合もあるかと思います。
そんな時は、保存ダイアログを表示させる方法をおすすめします。
まずは下記VBAコードを見てください。
Sub 保存先・ファイル名を都度指定()
Dim wb As Workbook
Dim filePath As String
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
filePath = Application.GetSaveAsFilename(FileFilter:="Excelファイル (*.xlsx), *.xlsx")
If filePath <> "False" Then
wb.SaveAs filePath
End If
wb.Close
End Sub
これを実行することで、下図のような保存ダイアログが開きます。

あとは手動で保存先とファイル名を指定すればOKです。
今回は、ファイルの種類を「Excelファイル (*.xlsx)」にしています。
マクロを含むファイルの場合は、下記コードのように「マクロ有効ブック」にしないとマクロが消えてしまいますのでご注意ください。
filePath = Application.GetSaveAsFilename(FileFilter:="Excel マクロ有効ブック (*.xlsm), *.xlsm")
【簡単なコード解説】
5行目:ダイアログを開く
7~9行目:Ifで条件分岐
「保存先・ファイル名を決定した場合→名前をつけて保存」
「キャンセルした場合→スキップ」
If文については下記記事でわかりやすく解説しております。ご参考ください。
ファイル名に日付を含める
ファイル名に日付を含めることで、管理がしやすくなります。
毎日のデータ集計などにおすすめです。
Sub 日付を含める()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
wb.SaveAs "C:\Utatane\" & Format(Date, "yyyymmdd") & "test.xlsx"
wb.Close
End Sub

保存するファイル名に本日の日付(Format(Date, “yyyymmdd”)を追加しているだけです。
日付に関する詳細解説は下記記事をご参考ください。
特定のセルの値をファイル名にする
特定のセルの値をファイル名にすることもできます。
資料のタイトル(A1セルの値)をファイル名にする場合などにおすすめです。
Sub 特定のセルの値をファイル名にする()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Utatane\test.xlsx")
wb.SaveAs "C:\Utatane\" & Range("A1").Value & ".xlsx"
wb.Close
End Sub

こちらも前項と同様、ファイル名にA1セルの値(Range(“A1”).Value)を追加しただけです。
うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
また、今回の場合は保存先のフォルダ名が間違っていたり、存在しないフォルダを指定した場合にも発生します。
実際のフォルダ名とコードを比較してみましょう。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
VBAで開いたファイルを別名保存(名前をつけて保存)する方法を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!