Excel:ファイルを検索するVBA|FileSearch:4種類の使用方法

Excel VBAでファイル検索する方法を4種類掲載しています。




Homeに戻る > Excel ファイル操作のTipsへ

ここではFileSearchオブジェクトを使用しています。

FileSearchオブジェクトを使用する前に、NewSearchメソッドで前回の検索条件と結果をクリアしておきます。

FileSearchオブジェクトの実行前に、下記のプロパティを設定します。

  • Filename:検索するファイル名を指定
    指定は「*.xls」などのようにワイルドカードを使うか、「Book1.xls」のようにファイル名を指定します。
  • LookIn:検索するフォルダを指定
  • SearchSubFolders:Trueを設定すると、サブフォルダ内も検索します。

実行はExecuteメソッドで行います。

ファイルが見つかれば見つかったファイル数が返り、見つからなければ0が返ります。

引数SortByで、検索結果を下記の順で並べ替えが可能です。

  • msoSortByFileName:1 ファイル名で並べ替え
  • msoSortBySize:2 ファイルサイズで並べ替え
  • msoSortByFileType:3 ファイルの種類で並べ替え
  • msoSortByLastModified:4 最終更新日で並べ替え
  • msoSortByNone:5 並べ替えない

引数SortOrderで並べ替えの順を指定できます。

  • msoSortOrderAscending:昇順
  • msoSortOrderDescending:降順

検索結果はFoundFilesオブジェクトに格納され、FoundFiles.Countで見つかったファイル数を取得できます。

個々のファイル名は、FoundFiles(n)のように配列で取得できます。

Excel2007からFileSearchオブジェクトは使えないようです。

Excel2007以降は、FileSystemObjectを使用すれば可能です。

使用方法は「FileSystemObjectの参照設定方法とファイル一覧を取得するVBA」の記事を参照してください。



ファイルを検索するVBA

フォルダ内のファイルを検索するVBA

VBAの解説

  1. NewSearchメソッドで前回の検索条件と結果をクリアします。
  2. SearchSubFoldersをFalseに設定しサブフォルダ内を検索しないようにセットします。
  3. LookInに検索するフォルダ「C:\picture」をセット
  4. Filenameにワイルドカードを使用し「"car*.*"」をセット、これで先頭に「car」が付いたファイルが検索できます。
  5. Executeで検索開始、引数SortByでファイル名順、SortOrderで昇順に設定していますが、ここでは意味ありません。
  6. Executeの戻り値を判定し、0より大きい場合FoundFiles.Countでファイル数を表示、0なら「見つかりませんでした」のメッセージを表示します。
Option Explicit

'Excel VBAでフォルダ内のファイルを検索
Private Sub ExFileSearch()
    Dim i As Integer

    'ファイル検索を開始
    With Application.FileSearch
        .NewSearch
        .SearchSubFolders = False
        .LookIn = "C:\picture"
        .Filename = "car*.*"
        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            MsgBox .FoundFiles.Count & "個見つかりました。"
        Else
            MsgBox "見つかりませんでした"
        End If
    End With
End Sub


サブフォルダ内も含めファイルを検索するVBA

VBAの解説

SearchSubFoldersをTrueに設定しサブフォルダ内を検索するようにセットします。

'Excel VBAでサブフォルダ内も含めファイルを検索
Private Sub ExSubFolderFileSearch()
    Dim i As Integer

    'ファイル検索を開始
    With Application.FileSearch
        .NewSearch
        .SearchSubFolders = True
        .LookIn = "C:\picture"
        .Filename = "car*.*"
        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            MsgBox .FoundFiles.Count & "個見つかりました。"
        Else
            MsgBox "見つかりませんでした"
        End If
    End With
End Sub



特定のファイルを検索するVBA

VBAの解説

Filenameにワイルドカードを使用しないで、ファイル名を指定しています。

'Excel VBAで特定のファイルを検索
Private Sub ExFileNameSearch()
    Dim i As Integer

    'ファイル検索を開始
    With Application.FileSearch
        .NewSearch
        .SearchSubFolders = False
        .LookIn = "C:\picture"
        .Filename = "car.jpg"
        If .Execute > 0 Then
            MsgBox "見つかりました。"
        Else
            MsgBox "見つかりませんでした"
        End If
    End With
End Sub


指定フォルダ内のExcelファイルを検索するVBA

VBAの解説

FileTypeにmsoFileTypeExcelWorkbooksを設定し、Excelファイルを検索しています。

ForとFoundFiles.Countで見つかったファイル数だけループし、FoundFiles(i)でセルに代入しています。

'Excel VBAで指定フォルダ内のExcelファイルを検索
Private Sub ExExcelFileSearch()
    Dim i As Integer

    ' ファイル検索を開始します
    With Application.FileSearch
        .NewSearch
        .LookIn = "c:\"
        .SearchSubFolders = True
        .FileType = msoFileTypeExcelWorkbooks
        If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                'ファイル名を表示する
                Range("E" & i) = .FoundFiles(i)
            Next i
        Else
            MsgBox "見つかりませんでした"
        End If
    End With
End Sub


上のプロシージャーを実行する

Private Sub CommandButton1_Click()
    'フォルダ内のファイルを検索
    ExFileSearch
    'サブフォルダ内も含めファイルを検索
    ExSubFolderFileSearch
    '特定のファイルを検索
    ExFileNameSearch
    '指定フォルダ内のExcelファイルを検索
    ExExcelFileSearch
End Sub

Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved