エクセルVBAで「ブックを閉じる」のコード記述方法を説明します。
「閉じる」はCloseメソッドを使用します。
引数の指定で変更を保存するしない、ブック名の変更なども設定します。
こんにちは、じゅんぱ店長(@junpa33)です。
ワークブックを閉じる(終了する)という作業は、
単にプログラムを終わらせるときだけでなく、ブックを変更し安全にそれを保存するために行う作業。
またあるいは、必要なセルデータを取得した後に、使用したデータブックを安全に閉じる場合など、いろいろな場面で、ブックを閉じるという作業は行われます。
ここでは、「ワークブックを閉じる」という作業のいろんなパターンを紹介します。どれも、知識的には必要なものばかりになります。ぜひ覚えておいてください。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
ブックを閉じるの12パターン
ワークブックを閉じる方法について12個のパターン分けで説明します。
- ワークブックを閉じる
- ワークブックを保存せずに閉じる
- ワークブックを保存して閉じる
- 指定したブックを保存して閉じる
- 名前を変更して閉じる
- コピーを作成して閉じる
- アクティブワークブックを閉じる
- アクティブワークブックを名前を付けて保存して閉じる
- すべてのワークブックを閉じる
- すべてのワークブックを保存して閉じる
- すべてのワークブックを保存せずに閉じる
- エクセルを閉じる
閉じる操作は、(エクセルを閉じる以外は)いずれも「Closeメソッド」を利用することになります。
Closeメソッドの構文
最初にCloseメソッドの記述方法についてです。
オプションとして引数を設定することが出来ます。多くの場合は、変更内容を保存するかどうか、と、その場合のファイル名をどうするかを指定するケースです。(オプション(引数)はいずれも、省略可能です。)
オブジェクト名 . Close [ ( SaveChanges, FileName, Routeworbook ) ]
指定する「オブジェクト名」には、「Workbooksコレクション」と「Workbookオブジェクト」があります。
Workbooksコレクションには引数を設定することは出来ません。
- 「Workbooksコレクション」とは、Windows上で(開かれている)すべてのエクセルBookを一まとめで扱います。表現方法・・・[ Workbooks ]
- 「Workbookオブジェクト」とは、1つのエクセルBookを個別に扱います。表現方法・・・Workbooks(“ファイル名”)
Workbookオブジェクトのファイル名は、基本的に拡張子まで記述する必要があります。
引数名 | 意味 |
---|---|
SavaChanges | 閉じるワークブックを編集していた場合、この引数で変更保存するかどうかを指定する。 True・・・保存する False ・・保存しない |
FileName | 変更保存の場合はこの引数で、ファイル名を指定してファイルを保存します。(フルパスで記述します。) |
Routeworbook | ブックに回覧するかどうかを指定する。 |
引数名は省略することも出来ます。
オブジェクト名.Close Savechanges:=True | ⇒ | オブジェクト名.Close True |
オブジェクト名.Close Savechanges:=False | ⇒ | オブジェクト名.Close False |
オブジェクト名.Close SaveChanges:=True , Filename:=”ファイル名” | ⇒ | オブジェクト名.Close True ,”ファイル名” |
ワークブックを閉じる(Workbookオブジェクト)
ワークブック「Book1.xlsm」を閉じます。
Sub ブックを閉じる1()
Workbooks("Book1.xlsm").Close
End Sub
「Book1.xlsm」が編集されている場合は、閉じるときに、メッセージが表示されます。
保存確認メッセージが表示されることによってVBAコードの進行が止まってしまいます。
メッセージの表示をコントロールするVBAコードを設置することによって、コード進行を妨げないようにすることが出来ます。
メッセージを表示停止する
Application.DisplayAlerts = False
メッセージを表示停止を解除する
Application.DisplayAlerts = True
「Workbookオブジェクトのファイル名は、基本的に拡張子まで記述する必要があります。」と
説明しましたが、例外もあります。
新規作成したエクセルブックをそのまま閉じる(終了する)場合は、その新規ブックに拡張子が指定される前に終了することになります。したがって、たとえば以下の様に記述する必要があります。
Sub ブックを閉じる2()
Workbooks("Book1").Close
End Sub
ワークブックを保存せずに閉じる(Workbookオブジェクト)
ワークブック「Book1.xlsm」を保存しないで閉じます。
Closeメソッドの引数「SaveChanges」を「False」に設定します。
引数「SaveChanges」を記述すると、ブックの保存確認メッセージは表示されなくなります。
Sub ブックを閉じる3()
Workbooks("Book1.xlsm").Close SaveChanges:=False
End Sub
ワークブックを保存して閉じる(Workbookオブジェクト)
ワークブック「Book1.xlsm」を保存して閉じます。
Closeメソッドの引数「SaveChanges」を「True」に設定します。
Sub ブックを閉じる4()
Workbooks("Book1.xlsm").Close SaveChanges:=True
End Sub
指定したブックを保存して閉じる(Workbookオブジェクト)
画面に複数のエクセルブックが開かれている状態で、ワークブック「Book1.xlsm」だけを保存して全て閉じるようにします。
Workbooks.Countで開かれているエクセルブックの数を取り出しカウンター変数に入れます。
1つづつ開いている数が減少しますので、カウンターをカウントダウンします。
保存が必要なブック名(Book1.xlsm)だけ保存対象としてそれ以外をIf文でピックアップして閉じる処理をします。
Sub ブックを閉じる5()
Dim i As Long
For i = Workbooks.Count To 1 Step -1
If Workbooks(i).Name <> "Book1.xlsm" Then
Workbooks(i).Close SaveChanges:=False
End If
Next i
Workbooks("Book1.xlsm").Close SaveChanges:=True
End Sub
名前を変更して閉じる(Workbookオブジェクト)
「Book1.xlsm」を「Book1の変更.xlsm」に名前を変更して保存終了します。保存先は、「Book1.xlsm」があるのと同じフォルダにします。(ThisWorkbook.Pathで指定 ブック名の前に「¥」を忘れずにしましょう)
Sub ブックを閉じる6()
Workbooks("Book1.xlsm").Close SaveChanges:=True, _
Filename:=ThisWorkbook.Path & "\Book1の変更.xlsm"
End Sub
コピーを作成して閉じる(Workbookオブジェクト)
「Book1.xlsm」を「Book1のコピー.xlsm」の名前でコピーを作成して閉じます。コピー先は、「Book1.xlsm」があるのと同じフォルダです。「Book1.xlsm」は変更を保存せずに終了します。
Sub ブックを閉じる7()
With Workbooks("Book1.xlsm")
.SaveCopyAs Filename:=ThisWorkbook.Path & _
"\Book1のコピー.xlsm"
.Close SaveChanges:=False
End With
End Sub
アクティブワークブックを閉じる(Workbookオブジェクト)
アクティブワークブックを終了します。
Sub ブックを閉じる8()
ActiveWorkbook.Close
End Sub
アクティブワークブックを名前を付けて保存して閉じる
ActiveWorkbookを新しい名前を付けて保存して閉じるには、
まず、新しい名前を付けて保存する作業を行います。その後にActiveWorkbookを閉じる作業を行います。
この例では、「Book2.xlsm」を開いてアクティブワークブックにします、更にそれに新しい名前「ActiveBookの変更.xlsm」として保存します。
最後に「Book2.xlsm」を閉じて終了です。
Sub ブックを閉じる9()
Workbooks.Open ThisWorkbook.Path & "\Book2.xlsm"
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\ActiveBookの変更.xlsm"
ActiveWorkbook.Close
End Sub
すべてのワークブックを閉じる(Workbooksコレクション)
画面上で開いているすべてのワークブックを指定するには「Workbooksコレクション」を使用します。
変更されたブックがある場合は、保存確認メッセージが表示されます。
VBAコードの進行が停止しますので、停止させたくない場合はメッセージを表示停止するコードを記述しておきます。
その場合は変更は保存されずに閉じられます。
Sub ブックを閉じる10()
Workbooks.Close
End Sub
保存確認メッセージが表示されることによってVBAコードの進行が止まってしまいます。
メッセージの表示をコントロールするVBAコードを設置することによって、コード進行を妨げないようにすることが出来ます。
メッセージを表示停止する
Application.DisplayAlerts = False
メッセージを表示停止を解除する
Application.DisplayAlerts = True
すべてのワークブックを保存して閉じる(Workbooksコレクション)
開いている全てのワークブックの変更を保存して終了します。
変更を保存する場合は、エクセルブック1つづつ変更保存して終了する作業を行っていきます。
このVBAコードが書かれたエクセルブックが先に閉じられてしまえば、そこでプログラムの実行が終了しますので、
そのエクセルブック(ThisWorkbook)が一番最後に変更保存して閉じられる、というコード記述をしなければいけません。
<For Each を使ったコード>
Sub ブックを閉じる11()
Dim WB As Workbook
For Each WB In Workbooks
If WB.Name <> ThisWorkbook.Name Then
WB.Close True
End If
Next
ThisWorkbook.Close True
End Sub
すべてのワークブックを保存せずに閉じる(Workbooksコレクション)
開いている全てのワークブックの変更を保存せずに終了します。
このエクセルブック(ThisWorkbook)が一番最後に変更保存して閉じられる、というコード記述をします。
<For~Nextを使ったコード>
Sub ブックを閉じる12()
Dim i As Long
For i = Workbooks.Count To 1 Step -1
If Workbooks(i).Name <> ThisWorkbook.Name Then
Workbooks(i).Close False
End If
Next i
ThisWorkbook.Close False
End Sub
エクセルを閉じる
開いているすべてのエクセルブックを終了すると、表示されるエクセル画面はソフトのみの状態(シートも表示されない空のエクセル状態)になります。
このエクセルソフトを閉じるとは「Application.Quit」とVBEに記述します。
ただしこれは、VBE上で記述実行されるので、当然VBEのあるエクセルブックも閉じられてしまった後では、実行することは出来ません。
つまり、
エクセルを閉じるコード「Application.Quit」は、エクセルブックを閉じるVBAコードの中に記述しておかないといけません。
ワークブック「Book1」だけを開いていて、それを保存終了してエクセル自体を終了したい場合
Sub エクセルを閉じる13()
Workbooks("Book1.xlsm").Close SaveChanges:=True
Application.Quit
End Sub
ブックを閉じるのまとめ
ブックを閉じるについて、閉じるという基本的なパターン、12のパターンを説明してきました。
また他にも、閉じる作業には、保存という作業もかかわってくることが多いので、CloseメソッドのほかにSaveメソッドも知っておくようにしましょう。
エクセルVBAではよく使うメソッドですので、参考にしてください。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。