【VBA】開いている全ブックから対象ブックをセット|InStr ファイル名の一部で判定
作成日:2022-12-25
更新日:2025-10-04

開いているブックをループして、対象のファイル名(一部)があればセットする

見つからないときはマクロ終了
' Get workbook by (partial) name|部分一致でブックを取得
' 見つからなければ Nothing を返す
Public Function GetBookByName(ByVal fileName As String) As Workbook
Dim wb As Workbook
For Each wb In Application.Workbooks
If InStr(1, wb.Name, fileName, vbTextCompare) > 0 Then
Set GetBookByName = wb
Exit Function
End If
Next wb
' 見つからなければ Nothing
Set GetBookByName = Nothing
End Function
呼び出し元
Sub ExampleUsage()
Dim target As Workbook
Set target = GetBookByName("Sample")
If target Is Nothing Then
MsgBox "対象ブックが見つかりません。"
Exit Sub
End If
' 処理続行
MsgBox "見つかった: " & target.Name
End Sub
責務の分離|Responsibility Separation

役割は分けるほうが自然
- 検索する関数 → Workbook を返すだけ
- UI通知 → 呼び出し元で実施
- 関数:「見つけたら返す/なければ Nothingを返す」
- 呼び出し側:メッセージや処理終了

InStrの説明
Keep logic pure,
let caller handle messages.
let caller handle messages.

同じ処理をPythonでも書いてみよう
2022-12-25
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-
[VBA]Dirで存在確認 【VBA】フォルダとファイルの存在確認|FSOよりもDir -
[VBA]Resizerows and columns 【VBA】Resize changes the size of a cell range|範囲のリサイズ -
クラスでForEachを使いたい 【VBA】クラスで通常のCollection機能を利用する準備|ForEachが使えない -
[VBA]Nameでパス変更 【VBA】ブックのフルパスを変更する(ファイル名の変更も含む)|Name -
Excel内でSQLを使いたい 【VBA】Excelシート内の表データをSQLで操作したい -
[VBA]fsoSingleton pattern 【VBA】FSO(“Scripting.FileSystemObject”)|シングルトン化して使う