即効テクニック |
ファイル検索の機能を表すFileSearchオブジェクトを取得します。 ●詳細● FileSearchオブジェクトは、[ファイルを開く]ダイアログボックスで[ツール]−[検索]を実行した場合の機能をVBAで実現するものです。非常に細かな設定でファイルを検索することが可能です。 構文 Object.FileSearch 取得のみ 設定項目 内容 Object Applicationオブジェクト[省略不可] FileSearchオブジェクトの詳細については解説しませんが、FileSearchオブジェクトを利用してファイル検索を行なうサンプルを紹介します。 フォルダ内に別フォルダにある「Samp」を含むExcelブックへのショートカットが含まれる場合には検索対象となります。 ●サンプル● Sub FileSearchSamp1() Dim i As Integer MsgBox ThisWorkbook.Path & Chr(13) & _ "以下の、名前に「Samp」を含むExcelブックを名前順に表示します" ActiveWorkbook.Worksheets.Add '---新規シートを追加 With Application.FileSearch '---FileSearchオブジェクトに対して .LookIn = ThisWorkbook.Path '---検索するフォルダを指定 .SearchSubFolders = True '---サブフォルダも検索対象にする .Filename = "*Samp*.xls" '---検索するファイル名の指定 .FileType = msoFileTypeExcelWorkbooks '---検索対象はエクセルブック If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then '---(1) MsgBox .FoundFiles.Count & " 個のExcelブックが見つかりました" For i = 1 To .FoundFiles.Count Cells(i, 1).Value = .FoundFiles(i) '---(2) Next i Else MsgBox "名前に「Samp」を含むExcelブックはありません" End If End With End Sub このサンプルは、コードの記述されたブックと同じフォルダにある、名前に「Samp」を含むExcelブックを検索し、結果を名前順にソートしてシートに書き出すものです。 検索条件を設定するプロパティに値を指定した後に、Executeメソッドで検索を実行しています。引数SortByの指定により、検索結果を名前順、種類順、更新日時順、サイズ順のいづれかで並び替えることができます。検索結果が0の場合、Executeメソッドは0を返しますので、@のステートメントで検索結果が0かどうかを判断しています。検索結果のファイル名は、パス付きの文字列でFoundFilesオブジェクトに格納されます。 ●ポイント● Dir関数でもファイルの検索が可能ですが、FileSearchオブジェクトのほうが、より柔軟なファイルの検索や結果のソートが可能です。