【ExcelVBA入門】ワークブックを閉じる方法を徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでブックを閉じる方法を知っていますか?

ブックを上書き保存した後や、新しくブックを作って保存した後など、ブックを閉じるケースはよくあります。

そこで今回は、

  • Closeステートメントでブックを閉じる方法
  • ブック名を指定して閉じる方法
  • 上書き保存後に閉じる方法
  • 名前を付けて保存後に閉じる方法

といった基礎的なことから、応用的な方法まで、徹底的に解説します!

目次

Closeステートメントでブックを閉じる方法

はじめに、Closeステートメントを使ったブックを閉じる方法について解説します。

Closeステートメントを使って次のように書くことで、簡単にブックを閉じることができます。

Closeステートメントの使い方:

Workbook.Close

ただ、1点注意点として、ブックを閉じるときに次のような警告メッセージが表示されることがあります。

ブックを閉じる処理が途中で止まってしまうため、以下のようにDisplayAlertsプロパティを使ってメッセージを非表示にする処理を入れるのがおすすめです!

Application.DisplayAlerts = False 'メッセージを非表示設定に変更
Workbook.Close
Application.DisplayAlerts = True  'メッセージを表示設定に変更

ブックを閉じるサンプル

次に、サンプルコードをもとに、具体的な使い方を解説します。

ブック名を指定して閉じる

まずは、ブック名を指定して閉じる方法です。

Openステートメントでブックを開き、開いたブックを閉じるサンプルコードを用意しました。

サンプルコード:

Sub Test1()
  'Test.xlsxを開く
  Workbooks.Open ThisWorkbook.Path & "Test.xlsx"
  
  '開いたブックA1セルのデータを出力
  Debug.Print Workbooks("Test.xlsx").Worksheets(1).Range("A1").Value
    
  'ブックを閉じる
  Application.DisplayAlerts = False 'メッセージを非表示に設定
  Workbooks("Test.xlsx").Close
  Application.DisplayAlerts = True  'メッセージを非表示に設定
End Sub

実行結果:

【Test.xlsx】の【A1セル】に書き込んだデータ

Closeステートメントの前にWorkbooks(ブック名)を指定することで、指定したブックを閉じています。

このように、簡単に指定したブックを閉じることができます。

アクティブワークブックを閉じる

次に、アクティブワークブックを閉じる方法について解説します。

アクティブワークブックとは、選択しているブックのことです。

複数のブックを使って処理を書く場合に、選択しているブックに対して操作をするケースはよくあるため、合わせて覚えておくと便利です。

今回は、Openステートメントで新しくブックを開いたあと、アクティブになったブックを閉じるサンプルコードを用意しました。

サンプルコード:

Sub Test2()
  'Test.xlsxを開く
  Workbooks.Open ThisWorkbook.Path & "Test.xlsx"
  
  '開いたブックA1セルのデータを出力
  Debug.Print ActiveWorkbook.Worksheets(1).Range("A1").Value
    
  'ブックを閉じる
  Application.DisplayAlerts = False 'メッセージを非表示に設定
  ActiveWorkbook.Close
  Application.DisplayAlerts = True  'メッセージを非表示に設定
End Sub

実行結果:

【Test.xlsx】の【A1セル】に書き込んだデータ

Closeステートメントの前にActiveWorkBookを指定することで、アクティブワークブックを閉じています。

このように簡単に指アクティブワークブックを閉じることができます。

ちなみに、アクティブワークブックの操作については以下で詳しく解説しているので、気になる方は見てみてくださいね!

マクロ実行ブックを閉じる

次に、マクロ実行ブックを閉じる方法について解説します。

※最初に注意点ですが、「Application.DisplayAlerts = False」で警告メッセージを表示せずにそのまま閉じる処理のため、事前に必ずファイルを保存してから以下コードを実行してください。

サンプルコード:

Sub Test3()
  'ブックを閉じる
  Application.DisplayAlerts = False 'メッセージを非表示に設定
  ThisWorkbook.Close
End Sub

Closeステートメントの前にThisWorkBookを指定することで、マクロを実行しているブックを閉じています。

ActiveWorkbookで選択しているブック、ThisWorkBookでマクロを実行しているブックを指定できることさえ覚えておけば、使い方は同じなので覚えておくと便利です!

上書き保存後に閉じる

次に、上書き保存後に閉じる方法について解説します。

書き換えたデータを保存してそのまま閉じる方法です。

サンプル実行前のTest.xlsxのデータ:

サンプルコード:

Sub Test4()
  'Test.xlsxを開く
  Workbooks.Open ThisWorkbook.Path & "Test.xlsx"
  
  '開いたブックのA2セルにデータ書き込み
  ActiveWorkbook.Worksheets(1).Range("A2").Value = "新しく追加したデータ"
    
  '上書き保存してからブックを閉じる
  Application.DisplayAlerts = False 'メッセージを非表示に設定
  ActiveWorkbook.Close True
  Application.DisplayAlerts = True  'メッセージを非表示に設定
End Sub

サンプル実行後のTest.xlsxのデータ::

A2セルに「新しく追加したデータ」を書き込んでから、上書き保存して閉じるサンプルです。

「ActiveWorkbook.Close True」のように、Closeステートメントに続けてTrueを書くことで保存してから閉じることができます。

名前を付けて保存後に閉じる

次に、名前を付けて保存後に閉じる方法について解説します。

サンプル実行前のフォルダ:

サンプルコード:

Sub Test5()
  'Test.xzlsxを開く
  Workbooks.Open ThisWorkbook.Path & "Test.xlsx"
  
  '別名で保存してからブックを閉じる
  Application.DisplayAlerts = False 'メッセージを非表示に設定
  ActiveWorkbook.Close True, ThisWorkbook.Path & "名前を付けて保存.xlsx"
  Application.DisplayAlerts = True  'メッセージを非表示に設定
End Sub

サンプル実行後のフォルダ:

「ActiveWorkbook.Close True, ファイルパス」を指定することで名前を付けて保存してから、ブックを閉じています。

今回は、「ThisWorkbook.Path & “名前を付けて保存.xlsx”」を指定することで、マクロを実行しているブックのフォルダに「名前を付けて保存.xlsx」の名前でブックを保存しています。

このように、簡単に名前を付けて保存後にブックを閉じることができます。

ブックを閉じずに保存だけする方法

ここまでブックを閉じる方法・保存してから閉じる方法について解説してきましたが、ブックを閉じずに保存だけしたいときもありますよね。

Saveメソッドでブックを上書き保存、SaveAsメソッドで名前を付けて保存することができるので、合わせて覚えておくと便利です!

Saveメソッド・SaveAsメソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!


【ExcelVBA入門】SaveAsメソッドを使ったファイル保存方法を徹底解説!
更新日:2024年3月29日

合わせて覚えると便利なブック操作方法

ここまでブックを閉じる方法をメインに解説してきました。

ただ、ブックを閉じる処理以外にもブック操作で覚えておくと便利なメソッド・プロパティはたくさんあります。

ブックの作成、保存、データ取得、データコピーなどまとめて以下で解説しているので、気になる方は見てみてくださいね!

まとめ

今回は、ブックを閉じるためのCloseステートメントの使い方について解説しました。

データを計算して保存した後、ブックを閉じたいケースはよくあります。

Closeステートメントは使い方も簡単なので、ぜひ使ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次