【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]get fso objectfrom path 【VBA】パスからfsoオブジェクトを取得する|fso.GetFolder/.GetFile -

[VBA]close booksave or not 【VBA】ブックを閉じる3つの方法|保存して/保存しないで/ブック名で/ -

[VBA]Cutbefore after 【VBA】文字列から指定文字より前/後ろをカットする|InStrRev/Left$/Mid$ -

数値に+ 記号を追加 【VBA】正の数値に+記号を追加|Sgn -

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

[VBA]Convert stringto Date 【VBA】文字列を日付型に変える|CDateよりDateSerial