サイトアイコン 独学エクセル塾

【マクロVBA】指定した文字の一部を含むファイルが開いてあるか確認し、対象ブックを全て閉じる方法

これまで対象のブックが開いてあるか、閉じてあるか確認する方法を紹介しました。
詳細の記事はこちらから☟

【マクロVBA】ブックを閉じているか確認して、閉じていない場合のみ閉じる(Close)方法 ► 独学エクセル塾 (dokugakuexcel.com)

今回はさらに発展させた内容を紹介します。内容としては指定した文字の一部を含むブックを
開いているか確認して、開いているファイルは閉じる
といった処理を行いたいと思います。

それでは見ていきましょう。




■忙しい人向けのコピペ用プログラム

赤文字の指定文字を打ち換えて使用してください。

Sub 対象ブックを閉じているか確認して開いてあれば閉じる()

Dim CloseBook As Workbook, Flag As Boolean

For Each CloseBook In Workbooks
 Flag = False
  If CloseBook.Name Like "*指定文字*" Then
   Flag = True
  End If
 If Flag = True Then
  Workbooks(CloseBook.Name).Close
 End If
Next
End Sub

⬛︎こんなことができるようになる!

・対象の文字を含むブック名のブックが開いているか確認し、開いていれば閉じるできる

■忙しい人向けのコピペ専用見本プログラム

Sub 対象ブックを閉じているか確認して開いてあれば閉じる()

Dim CloseBook As Workbook, Flag As Boolean

For Each CloseBook In Workbooks
Flag = False

If CloseBook.Name Like*ここに任意の文字を入力*” Then
Flag = True
End If
If Flag = True Then
Workbooks(CloseBook.Name).Close
End If
Next

End Sub

⬛︎通常のブック名を指定して確認する方法

まず、おさらいとしてブック名が全て判明している場合です。
対象ブックが開いている時に対象ブックを閉じるプログラムをご紹介します。
プログラムは下記の通りです。

Sub ブックAを閉じているか確認()

Dim CloseBook As Workbook, Flag As Boolean

Flag = False


For Each CloseBook In Workbooks

If CloseBook.Name = “ブックA.xlsx” Then
Flag = True
End If

Next

If Flag = True Then
Workbooks(“ブックA.xlsx”).Close
End If

End Sub

内容として、「For Each 変数 In Workbooks」で現在開いているブックを変数に繰り返し格納していきます。
そして変数に格納したブックと対象ブック名が等しければ「Flag」が「True」になり
「True」の場合は対象ブックを閉じるといった仕組みです。

今回はこの動作を応用して指定文字の一部でも等しい場合は対象ブックを閉じたいと思います。

⬛︎文字の一部を含むブックが開いてあるか確認して、開いていれば閉じる処理をする

では本題に入ります。
内容としては対象の文字の一部に対し、現在開いてあるブックを照らし合わせて
開いているか確認し、開いてあれば閉じる
といった内容となってます。

通常の処理と異なるのは「文字の一部」という面です。
その際に使用する機能は「ワイルドカード」と呼ばれる「✳︎となります。

では内容を紹介します。
通常では先ほどの「If CloseBook.Name = “ブックA.xlsx” 」のように「=」で
対象ブックか判別していましたが、今回はLike」を使用して文字列を比較します。

そして「Like」と「✳︎対象の文字の一部✳︎」を組み合わせて、対象の文字が含まれているか確認しています。
プログラムはこのようになります。

If 変数.Name Like "*対象としたい文字*" Then
Flag = True
End If

これにより、開いているブック名に対象としたい文字が含まれていれば変数「Flag」が「True」となります。

では見本を見ていきましょう。
今回は「A」という文字を含んであるブックを開いているか確認して
開いてある場合は閉じて見てみましょう。

プログラムはこのようになります。

Sub 対象ブックを閉じているか確認して開いてあれば閉じる()

Dim CloseBook As Workbook, Flag As Boolean

For Each CloseBook In Workbooks
Flag = False

If CloseBook.Name Like*A*” Then
Flag = True
End If

If Flag = True Then
Workbooks(CloseBook.Name).Close
End If

Next

End Sub

では実行すればどのようになるか説明します。
たとえば「A-1」「A-2」「A-3」「B-1」「B-2」「B-3」「C-1」「C-2」「C-3」
というブックを開いていたとします。

今回はブック名に「A」がつくブックを閉じるので
「A」を含む「A-1」「A-2」「A-3」のブックを対象とし、閉じるプログラムになります

⬛︎ワイルドカードの応用方法

これまでは指定の文字を含むブックが開いてあるか確認し、
開いてあればブックを閉じていました。

例えば「A」を含むブックを閉じたければ「✳︎A✳︎」の条件で開いてあるか確認してましたね。
しかし場合によっては「○○○A×××」というファイル名の形式があった場合、○○○の部分は対象から
外したい場合などが存在します。

その場合は「✳︎」の位置を変える必要があります。

先程の例で説明すると「○○○A×××」の「○○○A」までは固定で「×」の部分は全対象としたい場合、
A✳︎」を条件とします。

プログラムは下記の通りです。

Sub 対象ブックを閉じているか確認して開いてあれば閉じる()

Dim CloseBook As Workbook, Flag As Boolean

For Each CloseBook In Workbooks
Flag = False

If CloseBook.Name Like “A*” Then
Flag = True
End If

If Flag = True Then
Workbooks(CloseBook.Name).Close
End If

Next

End Sub

反対に「○○○A×××」の「A×××」までは固定で「○」の部分を全対象とする場合は
✳︎A」となります。

✳︎(ワイルドカード)」については下記記事でまとめてますのでぜひ参考にしてみて下さい。

【*(アスタリスク)の置換】うまくいかない原因と対処法!*ワイルドカードを無視 ► 独学エクセル塾 (dokugakuexcel.com)

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

Workbook.Close メソッド (Excel) | Microsoft Learn

⬛︎まとめ

いかがだったでしょうか。
指定した文字を含むブックを閉じる際にはとても楽になる知識です。

例えば日付でファイル名を管理してファイル開く、閉じるなどの
場合は対象の年月日のシートを閉じるなど、様々なことができます。

是非参考にしてみてください。
それでは次回の記事でお会いしましょう。

モバイルバージョンを終了