銀河鉄道

【VBA】開いている全ブックから対象ブックをセット|InStr ファイル名の一部で判定

サムネイル
[VBA]開いているブックからファイルを探す

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

見つからないときはマクロ終了

' 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.

同じ処理をPythonでも書いてみよう

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧