【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
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

クラスでForEachを使いたい 【VBA】クラスで通常のCollection機能を利用する準備|ForEachが使えない -

[VBA]Horizontal Paste1D array 【VBA】一次元配列を横方向にシートに貼り付け【範囲をリサイズする】 -

ユーザーフォームを半透明にする 【VBA】ユーザーフォームを半透明にしてシートの内容が見えるようにする|waiting-form -

[VBA]copyfile 【VBA】ブックを複製する|fso.CopyFile -

[VBA]SaveAs名前を付けて保存 【VBA】名前を付けて保存|SaveAs -

[VBA]ClearContentsシート初期化 【VBA】シートの初期化|ClearContentsで値のみ削除