これまで対象のブックが開いてあるか、閉じてあるか確認する方法を紹介しました。
詳細の記事はこちらから☟
【マクロVBA】ブックを開いているか確認し、開いていなければ開く(Open)開いてあればアクティブに ► 独学エクセル塾 (dokugakuexcel.com)
今回はさらに発展させた内容を紹介します。内容としては指定した文字の一部を含むブックを
開いているか・閉じているか確認して、開いていなければ開くといった処理を行いたいと思います。
もちろん、対象のファイルがたくさんあった場合にも対応可能です。
それでは見ていきましょう。
⬛︎こんなことができるようになる!
・対象の文字を含むブック名のブックが開いているか確認し、開いていなければ開くことができる
![](https://dokugakuexcel.com/wp-content/uploads/2022/09/image-53.png)
■忙しい人向けのコピペ用プログラム
「ここにフォルダのパスを入力する」と「ここに指定文字を入力」の
個所をお好みで打ち換えてください。
結果として指定フォルダ内の指定文字を開いているか確認し、開いていなければ開きます。
Sub 指定ファイルを開いているか確認し、開く()
Dim OpenBook As Workbook, Flag As Boolean
Dim Filename As String, Foldername As String, Searchname As StringFoldername = “ここにフォルダのパスを入力する“
Searchname = “ここに指定文字を入力“Filename = Dir(Foldername & “*” & Searchname & “*”)
Do While Filename <> “”
Flag = FalseFor Each OpenBook In Workbooks
If OpenBook.Name = Filename Then
Flag = True
End IfNext
If Flag = False Then
Workbooks.Open Foldername & “\” & Filename
End IfFilename = Dir
Loop
End Sub
⬛︎通常のブック名を指定して確認する方法
まず、おさらいとしてブック名が全て判明している場合で
対象ブックが開いていなければ対象ブックを開くプログラムをご紹介します。
プログラムは下記の通りです。
Sub ブックAを開いているか確認し、開く()
Dim OpenBook As Workbook, Flag As Boolean
Flag = False
For Each OpenBook In WorkbooksIf OpenBook.Name = “ブックA.xlsx” Then
Flag = True
End IfNext
If Flag = False Then
Workbooks.Open “C:\検証ファイル\ブックA.xlsx”
End IfEnd Sub
内容として、「For Each 変数 In Workbooks」で現在開いているブックをすべて変数に繰り返し格納します。
そして変数に格納したブックと対象ブック名が等しければ「Flag」が「True」になり
「False」の場合は対象ブックを開くといった仕組みです。
ちなみにブックを開く際は「フルパス」で開かないといけません。
フルパスの表示方法については下記の記事をご参照ください。
【マクロVBA知識 16】ブックを開く・作成・名前の変更・フォルダの移動・保存・閉じる ► 独学エクセル塾 (dokugakuexcel.com)
今回はこの動作を応用して指定文字の一部でも等しい場合は対象ブックを開きたいと思います。
⬛︎文字の一部を含むブックが開いてあるか確認して、開いていなければ開く
では本題に入ります。
内容としては対象の文字を含むファイルに対し、現在開いてあるブックを照らし合わせて
開いているか確認し、開いてなければ開くといった内容となってます。
通常の処理と異なるのは「文字の一部」という面です。
その際に使用する機能は「ワイルドカード」と呼ばれる「✳︎」となります。
こちらの効果としてすべての文字・数値を含む便利な機能です。
さらに使用する機能は「Dir」になります。
こちらは指定フォルダにどのようなファイルがあるか検出できます。
詳しくは下記記事にまとめていますのでご覧ください。
【マクロVBA】Dir関数で指定フォルダから対象ファイル・ブックが存在するか確認、処理する!一覧も可 ► 独学エクセル塾 (dokugakuexcel.com)
では「*」と「Dir」を合わせてみましょう。
変数 = Dir("C:\検証ファイル\*A*")
今回は指定フォルダを「Cドライブの検証ファイル」としています。
こちらに「A」の文字が含まれたファイルがあればファイル名を変数に格納します。
その変数とこれまで紹介したファイル名を比較するプログラムを合わせたプログラムがこちらです。
Flag = False
For Each OpenBook In Workbooks
If OpenBook.Name = 変数 Then
Flag = True
End IfNext
これにより、対象としたい文字が含まれたファイルと開いているファイルを比較して、開いていれば変数「Flag」が「True」となるプログラムとなります。
では見本を見ていきましょう。
今回は「A」という文字を含んであるブックを開いているか確認して
開いてなければ開いてみましょう。
プログラムはこのようになります。
Sub ブックAを開いているか確認し、開く()
Dim OpenBook As Workbook, Flag As Boolean, Filename
Filename = Dir(“C:\検証ファイル*A*”)
Do While Filename <> “”
Flag = FalseFor Each OpenBook In Workbooks
If OpenBook.Name = Filename Then
Flag = True
End IfNext
If Flag = False Then
Workbooks.Open “C:\検証ファイル\” & Filename
End IfFilename = Dir
Loop
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」がすでに開いているか確認し、開いてなけれな開きます。
まとめとして、「Foldername」 と「Searchname」の個所を入力すれば
機能するプログラムを載せておきます。
「ここにフォルダのパスを入力する」と「ここに指定文字を入力」の
個所をお好みで打ち換えてください。
結果として指定フォルダ内の指定文字を開いているか確認し、開いていなければ開きます。
Sub 指定ファイルを開いているか確認し、開く()
Dim OpenBook As Workbook, Flag As Boolean
Dim Filename As String, Foldername As String, Searchname As StringFoldername = “ここにフォルダのパスを入力する“
Searchname = “ここに指定文字を入力“Filename = Dir(Foldername & “*” & Searchname & “*”)
Do While Filename <> “”
Flag = FalseFor Each OpenBook In Workbooks
If OpenBook.Name = Filename Then
Flag = True
End IfNext
If Flag = False Then
Workbooks.Open Foldername & “\” & Filename
End IfFilename = Dir
Loop
End Sub
⬛︎ワイルドカードの応用方法
これまでは指定の文字を含むブックが開いてあるか確認し、
開いてあればブックを閉じていました。
例えば「A」を含むブックを閉じたければ「✳︎A✳︎」の条件で開いてあるか確認してましたね。
しかし場合によっては「○○○A×××」というファイル名の形式があった場合、○○○の部分は対象から
外したい場合などが存在します。
その場合は「✳︎」の位置を変える必要があります。
先程の例で説明すると「○○○A×××」の「○○○A」までは固定で「×」の部分は全対象としたい場合、
「A✳︎」を条件とします。
プログラムは下記の通りです。
Sub ブックAを開いているか確認し、開く()
Dim OpenBook As Workbook, Flag As Boolean, Filename
Filename = Dir(“C:\検証ファイル\A*”)
Do While Filename <> “”
Flag = FalseFor Each OpenBook In Workbooks
If OpenBook.Name = Filename Then
Flag = True
End IfNext
If Flag = False Then
Workbooks.Open “C:\検証ファイル\” & Filename
End IfFilename = Dir
Loop
End Sub
反対に「○○○A×××」の「A×××」までは固定で「○」の部分を全対象とする場合は
「✳︎A」となります。
「✳︎(ワイルドカード)」については下記記事でまとめてますのでぜひ参考にしてみて下さい。
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟
Workbooks.Open メソッド (Excel) | Microsoft Learn
⬛︎まとめ
いかがだったでしょうか。
指定した文字を含むブックを開く際にはとても楽になる知識です。
例えば日付でファイル名を管理してファイル開く、閉じるなどの
場合は対象の年月日のシートを開くなど様々なことができます。
是非参考にしてみてください。
それでは次回の記事でお会いしましょう。
コメント