VBA:[Tips]フォルダ内にあるファイル名を検索する

「VBA:[Tips]フォルダ内にあるファイル名を検索する」の編集履歴(バックアップ)一覧に戻る

VBA:[Tips]フォルダ内にあるファイル名を検索する - (2015/04/26 (日) 00:31:06) の編集履歴(バックアップ)


なにがどう

フォルダ階層中にある特定ファイルを探して列挙する。

探索方法

  1.  フォルダを探す
  2.  検索で見つかったフォルダ内に、検索条件に合致するファイルを探す。
  3.  ファイルが無いとき、フォルダ内にフォルダがあるかを探す。

フォルダもファイルも無いとき、探索終了。

どう実装するのか

使うオブジェクト

FileSystemObject
あとは再帰呼び出しをうまく活用する。
ファイルを探索するには以下のものが必要になる。
1.全てのフォルダを探索する関数
2.検索条件に合致するファイルを探索する関数
3.取得したファイル名を煮たり焼いたりするコード

まずフォルダを探索するメソッドを書く。

Sub folderSearch(path)
'オブジェクトの生成
With Create.Object("Scripting.FileSystemObject")
	'pathはフォルダのパス
	For Each folder In .GetFolder(path).SubFolders
		'再起呼び出し。検索でヒットしたフォルダのパスを引数に.
		Call folderSearch(folder.path)
	Next folder
End With
End Sub

同様に、ファイルを探索するメソッドを書く。

For Each file in .GetFolder(path).files
'検索語句を含むファイル名を列挙する
If file.Name Like target Then
	Cells(行,列)=file.path	'出力したいセルの位置を指定
	Cells(行,列)=file.name	'出力したいセルの位置を指定
End If
Next file

※補足
path
⇒探索フォルダのパス
file.path
⇒ファイルのフルパス
file.name
⇒ファイル名のみを取り出す

最後に合体する

Sub folderSearch(path)
'オブジェクトの生成
With Create.Object("Scripting.FileSystemObject")
	'pathはフォルダのパス
	For Each folder In .GetFolder(path).SubFolders
		'ファイルの探索
		For Each file in .GetFolder(path).files
		'検索語句を含むファイル名を列挙する
			If file.Name Like target Then
				Cells(行,列)=file.path	'出力したいセルの位置を指定
				Cells(行,列)=file.name	'出力したいセルの位置を指定
			End If
		Next file
	'再起呼び出し。検索でヒットしたフォルダのパスを引数に.
	Call folderSearch(folder.path)
	Next folder
End With
End Sub

わたしはファイルの探索を別メソッドにして強引に分けましたが無理やり中に書き込むとこんな感じ。
あとは出力先をインクリメントさせて一覧表示させるとか、メッセージボックスでアラート出して遊ぶとか、そういう使い道がありそう。