
VBAでファイルを閉じるコードは1行だけです。
誰でも簡単に実装できます。
私はfor文すら知らないプログラミングのド素人からVBAとPythonを独学しました。
会社では通常業務に加えて作業自動化と機械学習をしています。

・ファイルを自動で閉じたい
・自動で保存して閉じたい
・一連の事務作業すべてを自動化したい
こんな方におススメの内容です。
ファイルを開く方法は以下の記事で解説しています。
Closeでファイルを閉じる
以下の2つのファイルを開いているとします。
・”Book1.xlsx”(閉じたいファイル)
プログラム実行ファイルに、次のコードを書きましょう。↓
Sub test()
Workbooks("Book1.xlsx").Close
End Sub

Workbooks(“ファイル名”)で閉じたいファイルを指定してCloseです。
ファイルの指定方法は、Excelマクロでのセル,シート,ファイル指定で解説しています。

1行だけなのか。簡単やな。
変更を保存して閉じる
Sub test()
Workbooks("Book1.xlsx").Close savechanges:=True
End Sub
savechangesで、変更を保存するか、保存しないかを決めることができます。
False:保存しないで閉じる

savechangesのようなプログラムの条件のことを引数といいます。
=の手前にコロン「:」があるので注意してください。
savechangesを設定しないと以下の画面が現れます。

これが出てくるとプログラムが止まってボタンの選択待ちになります。

せっかく自動化しているのに、選択画面で止まるのはイマイチ。
ファイル名を変更して閉じる
Sub test()
savePath = "C:\Users\HTOM\Desktop"
saveName = "Changed.xlsx"
Workbooks("Book1.xlsx").Close savechanges:=True, Filename:=savePath & "\" & saveName
End Sub
引数Filenameに保存後のパスを書きます。

“Book1.xlsx”の変更を保存して、”Changed.xlsx”としてデスクトップに保存しました。


上記のコードでは、保存先フォルダのパスと保存後ファイル名とを分けています。
こうすれば、コードを修正するときに便利です。

フォルダのパスってどうやったらわかるの?
アドレスバーをクリックすると、そのフォルダのパスが全選択されます。

これをsavePathにコピペしてください。
あとはsaveNameを好きな名前に変更するだけですね。

savechangesがFalseだと、
そもそも変更を保存されないので注意してください。
全てのファイルを閉じる
Sub test()
Workbooks.Close
End Sub
Workbooksと書いて、ファイル名は指定せずにCloseです。
これで全ファイルを閉じられますが、変更を保存しないので注意しましょう。
全ファイルを保存してから閉じる方法
Sub test()
For Each wb In Workbooks
wb.Save
Next wb
Workbooks.Close
End Sub
For Eachで全ファイルを1つずつ操作できます。

Nextで次のファイルに移り、全ファイル処理したらCloseが実行されます。
ファイル保存についてはExcelマクロでファイルを保存する方法をご覧ください。
Excelを終了する方法
Closeで全ファイルを閉じても、カラのExcelファイルが表示されたままになります。
なので、Excelのアプリ自体を終了させましょう。
Sub test()
Application.Quit
End Sub
ApplicationとはExcelのアプリ自体のことです。
QuitでExcelを終了します。
このときCloseを使わなくともファイルが閉じられます。
全ファイルを保存してからExcelを終了する方法
Sub test()
For Each wb In Workbooks
wb.Save
Next wb
Application.Quit
End Sub
全てのファイルをSaveで保存してからQuitで終了すれば、カラのファイルが残ることもありません。

これが一番長いけど丁寧な処理ですよ。
まとめ:ファイルを自動で閉じられるようになろう
今回はVBAでファイルを閉じる方法について解説しました。
ファイルを開いて閉じることができれば、あとはコピペなど作業内容をプログラム化するだけです。
コメント