【VBA】Excelマクロでファイルを保存する方法

VBA
Image by Goumbik from Pixabay
スポンサーリンク
HTOM

【筆者プロフィール】
・プログラミング未経験からVBAとPythonを独学
・業務自動化と機械学習を仕事に取り入れた

こんな私が書いた当記事は以下の人におススメです。

・VBAで業務効率を上げたい
・非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に変わっていますね。

HTOM

保存先とファイル名はご自身の仕事に合わせてくださいね。

同名ファイルが存在する場合

名前をつけて保存する際にもし既に同名ファイルがあると、以下の確認ウィンドウが現れます。

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

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
年:Year(Date)、月:Month(Date)、日:Day(Date)

Format(数字, “00”)で2桁表示に統一できます。

これを保存したい名前に足して.SaveAsの引数Filenameに使いましょう。

詳しくはExcelマクロで日付を入れた名前を付けて保存する方法をご覧ください。

まとめ:ファイルの保存を自動化しよう

今回はファイルの保存方法について解説しました。

ファイルを保存するプログラム単体では非力なので、ファイルを開いたりコピーしたりと別の作業のプログラムに組み込みたいですね。

ファイルを開くプログラムについてはExcelマクロでファイルを開く方法をご覧ください。

おススメ書籍

こんな人におススメ:VBAの基礎を理解している人。平均レベルの一歩上を行きたい人。

こんな人におススメ:プログラミング初学者。実務への応用よりも基礎知識を求めている人。

VBA
スポンサーリンク
HTOMblog

コメント

タイトルとURLをコピーしました