ワークブックを閉じる12のパターン使い分け VBA最速理解

vbabookcloseeyecatch

エクセルVBAで「ブックを閉じる」のコード記述方法を説明します。
「閉じる」はCloseメソッドを使用します。

引数の指定で変更を保存するしない、ブック名の変更なども設定します。

こんにちは、じゅんぱ店長(@junpa33)です。

ワークブックを閉じる(終了する)という作業は、

単にプログラムを終わらせるときだけでなく、ブックを変更し安全にそれを保存するために行う作業。

またあるいは、必要なセルデータを取得した後に、使用したデータブックを安全に閉じる場合など、いろいろな場面で、ブックを閉じるという作業は行われます。

ここでは、「ワークブックを閉じる」という作業のいろんなパターンを紹介します。どれも、知識的には必要なものばかりになります。ぜひ覚えておいてください。

ブックを閉じるの12パターン

vbabookclosep002

ワークブックを閉じる方法について12個のパターン分けで説明します。

閉じる操作は、(エクセルを閉じる以外は)いずれも「Closeメソッド」を利用することになります。

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」を閉じます。

VBA
Sub ブックを閉じる1()
        Workbooks("Book1.xlsm").Close
End Sub

「Book1.xlsm」が編集されている場合は、閉じるときに、メッセージが表示されます。

vbabookclosep001
保存確認メッセージ

保存確認メッセージが表示されることによってVBAコードの進行が止まってしまいます。

メッセージの表示をコントロールするVBAコードを設置することによって、コード進行を妨げないようにすることが出来ます。

メッセージを表示停止する

Application.DisplayAlerts = False

メッセージを表示停止を解除する

Application.DisplayAlerts = True

Workbookオブジェクトのファイル名記述の例外

「Workbookオブジェクトのファイル名は、基本的に拡張子まで記述する必要があります。」と

説明しましたが、例外もあります。

新規作成したエクセルブックをそのまま閉じる(終了する)場合は、その新規ブックに拡張子が指定される前に終了することになります。したがって、たとえば以下の様に記述する必要があります。

VBA
Sub ブックを閉じる2()
        Workbooks("Book1").Close
End Sub

ワークブックを保存せずに閉じる(Workbookオブジェクト)

ワークブック「Book1.xlsm」を保存しないで閉じます。

Closeメソッドの引数「SaveChanges」を「False」に設定します。

引数「SaveChanges」を記述すると、ブックの保存確認メッセージは表示されなくなります。

VBA
Sub ブックを閉じる3()
        Workbooks("Book1.xlsm").Close SaveChanges:=False
End Sub

ワークブックを保存して閉じる(Workbookオブジェクト)

ワークブック「Book1.xlsm」を保存して閉じます。

Closeメソッドの引数「SaveChanges」を「True」に設定します。

VBA
Sub ブックを閉じる4()
        Workbooks("Book1.xlsm").Close SaveChanges:=True
End Sub

指定したブックを保存して閉じる(Workbookオブジェクト)

画面に複数のエクセルブックが開かれている状態で、ワークブック「Book1.xlsm」だけを保存して全て閉じるようにします。

Workbooks.Countで開かれているエクセルブックの数を取り出しカウンター変数に入れます。

1つづつ開いている数が減少しますので、カウンターをカウントダウンします。

保存が必要なブック名(Book1.xlsm)だけ保存対象としてそれ以外をIf文でピックアップして閉じる処理をします。

VBA
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で指定 ブック名の前に「¥」を忘れずにしましょう)

VBA
Sub ブックを閉じる6()
        Workbooks("Book1.xlsm").Close SaveChanges:=True, _
            Filename:=ThisWorkbook.Path & "\Book1の変更.xlsm"
End Sub

コピーを作成して閉じる(Workbookオブジェクト)

「Book1.xlsm」を「Book1のコピー.xlsm」の名前でコピーを作成して閉じます。コピー先は、「Book1.xlsm」があるのと同じフォルダです。「Book1.xlsm」は変更を保存せずに終了します。

VBA
Sub ブックを閉じる7()
        With Workbooks("Book1.xlsm")
            .SaveCopyAs Filename:=ThisWorkbook.Path & _
                                        "\Book1のコピー.xlsm"
            .Close SaveChanges:=False
        End With
End Sub

アクティブワークブックを閉じる(Workbookオブジェクト)

アクティブワークブックを終了します。

VBA
Sub ブックを閉じる8()
        ActiveWorkbook.Close
End Sub

アクティブワークブックを名前を付けて保存して閉じる

ActiveWorkbookを新しい名前を付けて保存して閉じるには、

まず、新しい名前を付けて保存する作業を行います。その後にActiveWorkbookを閉じる作業を行います。

この例では、「Book2.xlsm」を開いてアクティブワークブックにします、更にそれに新しい名前「ActiveBookの変更.xlsm」として保存します。

最後に「Book2.xlsm」を閉じて終了です。

VBA
Sub ブックを閉じる9()
        Workbooks.Open ThisWorkbook.Path & "\Book2.xlsm"
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\ActiveBookの変更.xlsm"
        ActiveWorkbook.Close
End Sub

すべてのワークブックを閉じる(Workbooksコレクション)

画面上で開いているすべてのワークブックを指定するには「Workbooksコレクション」を使用します。

変更されたブックがある場合は、保存確認メッセージが表示されます。

VBAコードの進行が停止しますので、停止させたくない場合はメッセージを表示停止するコードを記述しておきます。

その場合は変更は保存されずに閉じられます。

VBA
Sub ブックを閉じる10()
        Workbooks.Close
End Sub

保存確認メッセージが表示されることによってVBAコードの進行が止まってしまいます。

メッセージの表示をコントロールするVBAコードを設置することによって、コード進行を妨げないようにすることが出来ます。

メッセージを表示停止する

Application.DisplayAlerts = False

メッセージを表示停止を解除する

Application.DisplayAlerts = True

すべてのワークブックを保存して閉じる(Workbooksコレクション)

開いている全てのワークブックの変更を保存して終了します。

変更を保存する場合は、エクセルブック1つづつ変更保存して終了する作業を行っていきます。

このVBAコードが書かれたエクセルブックが先に閉じられてしまえば、そこでプログラムの実行が終了しますので、

そのエクセルブック(ThisWorkbook)が一番最後に変更保存して閉じられる、というコード記述をしなければいけません。

<For Each を使ったコード>

VBA
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を使ったコード>

VBA
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」だけを開いていて、それを保存終了してエクセル自体を終了したい場合

VBA
Sub エクセルを閉じる13()
        Workbooks("Book1.xlsm").Close SaveChanges:=True
        Application.Quit
End Sub

ブックを閉じるのまとめ

vbabookclosep003

ブックを閉じるについて、閉じるという基本的なパターン、12のパターンを説明してきました。

また他にも、閉じる作業には、保存という作業もかかわってくることが多いので、CloseメソッドのほかにSaveメソッドも知っておくようにしましょう。

エクセルVBAではよく使うメソッドですので、参考にしてください。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min