
【筆者プロフィール】
・プログラミング未経験からVBAとPythonを独学
・業務自動化と機械学習を仕事に取り入れた
こんな私が書いた当記事は以下の人におススメです。
・非IT社員だけどプログラミングを武器にしたい
・初心者や未経験でもわかりやすい解説がいい
Excelマクロでファイルを保存する方法まとめ
.Saveで上書き保存する
Sub test()
ThisWorkbook.Save
End Sub
プログラム実行ファイル自身を上書き保存するならThisworkbook.SaveでOKです。
ThisWorkbookはプログラムを書いたファイルを指しています。
仮に”Book1.xlsx”というファイルも開いているなら、以下のように保存可能です。
Sub test()
Workbooks("Book1.xlsx").Save
End Sub
Workbooks(“ファイル名”)で指定して.Saveで保存しましょう。
.SaveAsで名前をつけて保存する
Sub test()
Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Desktop\Book1_saved.xlsx"
End Sub
Workbooks(“ファイル名”)で指定する部分は同じ。
その後に.SaveAsを足して半角スペースを空け、保存先のファイルのパスを書きましょう。
ファイルのパスとはファイルの位置のことで、”\”を境にフォルダの階層が変わります。

上図ではデスクトップに”Book1_saved.xlsx”として保存しています。

もし保存先をドキュメントフォルダにしたいなら以下のように書き換えましょう。
Sub test()
Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Documents\Book1_saved.xlsx"
End Sub
Desktopの部分がDocumentsに変わっていますね。

保存先とファイル名はご自身の仕事に合わせてくださいね。
同名ファイルが存在する場合
名前をつけて保存する際にもし既に同名ファイルがあると、以下の確認ウィンドウが現れます。

“はい”か”いいえ”を選べばいいのですが、”キャンセル”を押すとエラーになります。

Sub test()
On Error GoTo Error
Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Desktop\Book1_saved.xlsx"
Exit Sub
Error:
MsgBox "キャンセルされました。"
End Sub
On Error GoTo Errorでエラー時にError:の位置まで移動させることができます。
もし”キャンセル”を押してエラーになったら終了させましょう。
エラー処理についてはExcelマクロのエラー処理2パターンで解説しています。
パスワードをつけて保存する
Sub test()
Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Desktop\Book1_saved.xlsx", Password:="pass"
End Sub
Password := “パスワード”と書くことで設定可能です。
このようにプログラムの条件を設定する項目を”引数(ひきすう)”と呼びます。
さらに厳密に言うと、保存先ファイルパスの引数名はFilenameです。
Sub test()
Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx", Password:="pass"
End Sub
引数名をすべて設定するとコードが長くなりますが、この方が確実で親切ですね。
読み取り専用で保存する場合
Sub test()
Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx", ReadOnlyRecommended:=True
End Sub
ファイルを開く際に読み取り専用を確認したい場合は引数ReadOnlyを設定しましょう。
ReadOnlyRecommendedをTrueにすれば、該当ファイルを開くときに以下の確認ウィンドウが現れます。

保存してからファイルを閉じる場合
Sub test()
Workbooks("Book1.xlsx").Save
Workbooks("Book1.xlsx").Close
End Sub
Workbooks(“ファイル名”).Closeで指定したファイルを閉じることができます。
もちろん.SaveAsと組み合わせても大丈夫です。
Sub test()
Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx"
Workbooks("Book1_saved.xlsx").Close
End Sub
ただしこの場合は保存後のファイル名が変わっている(上図なら”Book1_saved”)ので、.Closeの時に指定するファイル名に注意しましょう。
.Closeで保存する方法
Sub test()
Workbooks("Book1.xlsx").Close savechanges:=True, Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx"
End Sub
.Closeの引数を設定すれば保存しながらファイルを閉じることができます。
savechangesをTrueに設定し、Filenameに保存先のパスを書きましょう。
すると指定したファイルが閉じられるとともに別名で保存されます。
しかし元ファイルに何も変更がない場合は別名ファイル(“Book1_saved”)が作成されないので注意してください。
詳しくはExcelマクロでファイルを閉じる方法で解説しています。
日付を含めた名前をつけて保存したい場合
Sub test()
y = Year(Date)
m = Month(Date)
d = Day(Date)
saveName = "Book1_saved"
saveName = saveName & "_" & y & Format(m, "00") & Format(d, "00") & ".xlsx"
Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\" & saveName
End Sub
Format(数字, “00”)で2桁表示に統一できます。
これを保存したい名前に足して.SaveAsの引数Filenameに使いましょう。

詳しくはExcelマクロで日付を入れた名前を付けて保存する方法をご覧ください。
まとめ:ファイルの保存を自動化しよう
今回はファイルの保存方法について解説しました。
ファイルを保存するプログラム単体では非力なので、ファイルを開いたりコピーしたりと別の作業のプログラムに組み込みたいですね。
ファイルを開くプログラムについてはExcelマクロでファイルを開く方法をご覧ください。
おススメ書籍
こんな人におススメ:VBAの基礎を理解している人。平均レベルの一歩上を行きたい人。
こんな人におススメ:プログラミング初学者。実務への応用よりも基礎知識を求めている人。
コメント