このブックThisWorkBook以外をすべて閉じる
マクロ講座 動画編 02回
複数のワークブックを開いていて、このマクロが記載されているブック以外のブックを全部閉じたいという場合に実行するマクロです。
動画でExcel このブックThisWorkBook以外をすべて閉じる
このブックThisWorkBook以外をすべて閉じる
複数のワークブックを開いていて、このマクロが記載されているブック以外のブックを全部閉じたいという場合に実行するマクロです。
または、特定の名前のブック以外を閉じたいということもあるでしょう。そのような時にはどのようなコードを書けばいいのでしょうか。
マクロ動画 このブックThisWorkBook以外をすべて閉じる
このブック以外を指定する
-
まず、ひとつずつのワークブックを表す変数としてwbを宣言しています。
Dim wb As Workbook 複数のワークブックを開いているので、それらはすべてのブックを表す Workbooks コレクションで表せます。
このブックは、ThisWorkbook プロパティで参照します。
-
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
-
ただ、この時にブックに変更があると、
ブックを閉じる前に「変更を保存しますか?」という確認ダイアログが表示されます
この確認画面を表示せずにブックを閉じるには、引数SaveChangesを指定します。
サンプルでは変更を上書き保存して閉じるのでTrueに設定、
もし変更を保存しないで閉じる場合にはFalseを指定します。 savechanges:=Trueは、保存するという意味です。
wb.Close savechanges:=True wb(ワークブック)を保存して閉じるこのブック以外を閉じるマクロのコードは以下のようになります
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
Workbooks コレクションのなかのワークブックとどのように区別するのかというと、比較演算子を使って
If wb.Name <> ThisWorkbook.Name Then
”ThisWorkbook.Nameと違ったら、その時は” という意味になります。
ThisWorkbook以外を閉じるマクロの発展
-
アクティブなブック以外を閉じる場合には、次のように書き換えます。
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
-
特定の名前のブック以外を閉じる場合には、には、次のように書き換えます。
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
-
特定の名前のだけを閉じる場合には、比較演算子=で次のように書き換えます。
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
-
名前に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