このブックThisWorkBook以外をすべて閉じる

マクロ講座 動画編 02回
複数のワークブックを開いていて、このマクロが記載されているブック以外のブックを全部閉じたいという場合に実行するマクロです。

マクロ講座

動画でExcel このブックThisWorkBook以外をすべて閉じる

このブックThisWorkBook以外をすべて閉じる

複数のワークブックを開いていて、このマクロが記載されているブック以外のブックを全部閉じたいという場合に実行するマクロです。
または、特定の名前のブック以外を閉じたいということもあるでしょう。そのような時にはどのようなコードを書けばいいのでしょうか。

マクロ動画 このブックThisWorkBook以外をすべて閉じる

このブック以外を指定する

  1. 変数の宣言まず、ひとつずつのワークブックを表す変数としてwbを宣言しています。
    Dim wb As Workbook

  2. 複数のワークブックを開いているので、それらはすべてのブックを表す Workbooks コレクションで表せます。
    このブックは、ThisWorkbook プロパティで参照します。

    このブック以外を閉じるマクロ1
  3. Workbooks コレクションのなかのワークブックとどのように区別するのかというと、比較演算子を使って
    If wb.Name <> ThisWorkbook.Name Then
    ”ThisWorkbook.Nameと違ったら、その時は” という意味になります。

    このブック以外を閉じるマクロ2
  4. Workbooksはコレクションですので、その
    ひとつひとつのワークブックを参照していくには
    For Each...Next ステートメントを利用します。
    名前が違っていたら、次の処理をします。
    wb.Close Workbookオブジェクトの Closeメソッドでwb(ワークブック)を閉じなさい。

    For Each wb In Workbooks 
        If wb.Name <> ThisWorkbook.Name Then 
            wb.Close savechanges:=True 
        End If 
    Next wb
  5. ただ、この時にブックに変更があると、
    ブックを閉じる前に「変更を保存しますか?」という確認ダイアログが表示されます
    この確認画面を表示せずにブックを閉じるには、引数SaveChangesを指定します。
    サンプルでは変更を上書き保存して閉じるのでTrueに設定、
    もし変更を保存しないで閉じる場合にはFalseを指定します。 savechanges:=Trueは、保存するという意味です。
    wb.Close savechanges:=True  wb(ワークブック)を保存して閉じる

    このブック以外を閉じるマクロ3

    このブック以外を閉じるマクロのコードは以下のようになります

    Public Sub Otherbooks_Close()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name <> ThisWorkbook.Name Then
                wb.Close SaveChanges:=True
    '          確認ダイアログを表示せず 保存しないで閉じる場合は以下
    '            wb.Close SaveChanges:=False
            End If
        Next
    End Sub

ThisWorkbook以外を閉じるマクロの発展

  1. アクティブなブック以外を閉じる場合には、次のように書き換えます。

    Public Sub Except_Activebook_Close()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name <> ActiveWorkbook.Name Then
                wb.Close SaveChanges:=True
    '          確認ダイアログを表示せず 保存しないで閉じる場合は以下
    '            wb.Close SaveChanges:=False
            End If
        Next
    End Sub
    
  2. 特定の名前のブック以外を閉じる場合には、には、次のように書き換えます。

    Public Sub Except_Specificbook_Close()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name <> "Mybook.xlsx" Then
                wb.Close SaveChanges:=True
            End If
        Next
    End Sub
    
  3. 特定の名前のだけを閉じる場合には、比較演算子=で次のように書き換えます。

    Public Sub Except_Specificbook_Close()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name = "Mybook.xlsx" Then
                wb.Close SaveChanges:=True
            End If
        Next
    End Sub
    
  4. 名前にMyのついたブック を閉じる場合はLikeを使います。

    Public Sub Except_Specificbook_Close()
        Dim wb As Workbook
        For Each wb In Workbooks
            If wb.Name Like "My*" Then
                wb.Close SaveChanges:=True
            End If
        Next
    End Sub