ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA エクセルブックを閉じる方法とその周辺

単にアクティブなエクセルのワークブックを閉じるだけなら簡単なのですが、一歩踏み込んだ操作までマスターするとツールの完成度が高まります。一緒に頑張っていきましょう。

目次

エクセルブックを閉じる方法

アクティブなエクセルブックを閉じるのはたったの一行です。

ActiveWorkbook.Close

次の項からもう少し細かく見ていきます。

ブックを閉じる時に保存するのか、保存しないのかを明確に記述する

しかし、これでは保存して閉じるのか、保存せずに閉じるのかわかりません。
引数に保存して閉じるのか、そうでないのかを指定しましょう。

ActiveWorkbook.Close SaveChanges:=False  '保存せずに閉じる
ActiveWorkbook.Close SaveChanges:=True  '保存して閉じる

SaveChangesは自動でSとCが大文字に変換されませんが、問題ありません。
書く必要もないのですが、後から見てわかりやすいように、私は書くようにしています。
なぜ保存するのかを明確に記しておくべきかというと、単に閉じようとすると、「このファイルの変更内容を保存しますか」というメッセージが出てしまうからです。

元データとして内容を読み取るだけなら保存せずに閉じる、成果物なら保存して閉じると明確に記述するのがおすすめです。

ブックは変数に格納しておく

この方法だといちいち閉じるためにブックをアクティブにしなければならず、不便です。特にエクセルは保存するまでフルパスが確定しないため、非常に指定しづらいです。私のお勧めはブックを変数に格納しておくことです。

Sub ブックを変数に入れることで取り扱いをしやすくする()
    
    Dim ブック As Workbook
    
    Workbooks.Add
    Set ブック = ActiveWorkbook
    
End Sub

このように、変数に格納しておけば、アクティブにしたり任意のタイミングで閉じたり、取り扱いが大変やりやすくなります。

'変数を使って自由にブックを操ることができる   
ブック.Activate
ブック.SaveAs Filename:="フルパス"
ブック.Save '上書き保存
ブック.Close SaveChanges:=False
ブック.Close SaveChanges:=True

ブックはオブジェクトなので、変数に代入する時はSetをつけ忘れないようにしましょう。

成果物のデータはぎりぎりまで保存しない

入力データに何かの処理を施して、成果物ができます。その成果物はマクロの実行が完了するぎりぎりまで保存しない方がよいことが多いです。

理由は、途中で何らかの予期せぬエラーが起きたり、途中でユーザーがマクロの実行を中断した場合に、余計なデータが保存された状態になってしまう為です。

エクセルブックは保存するまで、ファイル名が確定しません。そのため、ブックを指定するため(つまり、Workbooks(ファイル名)を使う為)に一旦西行完了前のブックを保存する方がいるかもしれませんが、これを解決するのが上述の変数にブックを格納する方法です。

特に理由がない限り、成果物のデータはぎりぎりまで保存しない。これを意識しましょう。

エクセルブックを閉じる方法とその周辺まとめ

  • ブックを閉じる時に保存するのか、保存しないのかを明確に記述する
  • ブックは変数に格納しておくといろいろと取り扱いが便利
  • 成果物のデータはぎりぎりまで保存しない方がトラブルが少ない

以上、ちょっとしたコツですが、ブックを閉じるところの動作周辺を少し心がけるだけでツールの完成度が高まります。頑張っていきましょう。

<関連記事>