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

VBA
スポンサーリンク

ファイルを指定してSaveを使えば自動でファイルを保存することができます。

Sub test()

ThisWorkbook.Save

End Sub

他にも名前を付けて保存したり、実行日の日付を加えた名前で保存したりも可能です。

Saveで上書き保存する

Sub test()

ThisWorkbook.Save

End Sub

プログラム実行ファイル自身を上書き保存するなら、Thisworkbook.Saveです。

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に変わっていますね。

ユーザー名は人によって違うので注意してください。

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

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

エラーするとプログラムが止まっちゃうので、対処しておきましょう。

“On Error GoTo Error”で、エラー時にError:の位置まで移動させることができます。

Sub test()

On Error GoTo Error
Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Desktop\Book1_saved.xlsx"
Exit Sub

Error:
    MsgBox "キャンセルされました。"
    
End Sub

もし”キャンセル”を押してエラーになったら終了させましょう。

パスワードをつけて保存する

Password := “パスワード”で設定可能です。

Sub test()

Workbooks("Book1.xlsx").SaveAs "C:\Users\HTOM\Desktop\Book1_saved.xlsx", Password:="pass"

End Sub

ちなみに、保存先ファイルパスはFilenameで設定されています。

Sub test()

Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx", Password:="pass"

End Sub

引数名をすべて書くとコードが長くなりますが、この方が確実で親切です。

読み取り専用で保存する

ファイルを開く際に読み取り専用を確認したい場合は、ReadOnlyを設定しましょう。

Sub test()

Workbooks("Book1.xlsx").SaveAs Filename:="C:\Users\HTOM\Desktop\Book1_saved.xlsx", ReadOnlyRecommended:=True

End Sub

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

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マクロで日付を入れた名前を付けて保存する方法をご覧ください。

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

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

ファイルを開いたりコピーしたりと別の作業のプログラムに組み込みたいですね。

VBAの次に新しい言語に挑戦したいな。。。

と考えている方にはPythonがおすすめです。勉強方法についても解説しています。

コメント

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