HOME > 即効テクニック > Excel VBA > ファイル操作関連のテクニック > フォルダ内のファイル名とファイル情報の一覧を取得する(WMI)

フォルダ内のファイル名とファイル情報の一覧を取得する(WMI)|Excel VBA

ファイル操作関連のテクニック

フォルダ内のファイル名とファイル情報の一覧を取得する(WMI)

(Excel 2002/2003/2007/2010)

フォルダ内のファイル名一覧を取得するにはいろいろな方法がありますが、ここではWMI(Windows Management Instrumentation)を使う方法をご紹介します。
SWbemServicesオブジェクトのExecQueryメソッドでは、SQLステートメントと似たような書き方で検索条件を指定できます。
このとき、パスの区切りは「\\」、Likeのワイルドカードは「%」で指定します。

次のマクロは、「C:\Data」フォルダから、ファイル名に「Sample」を含むExcelファイルのファイル名、ファイルサイズ、作成日と最終更新日の一覧をアクティブシートに出力します。

ただし、サブフォルダ内のファイルは取得できません。サブフォルダも含めるには、
サブフォルダを含めてファイル一覧を取得する(WSHでDirコマンドを実行)」を参照してください。

Sub Sample()
    Dim Locator As Object 'SWbemLocator
    Dim Service As Object 'SWbemServices
    Dim Files As Object   'SWbemObjectSet
    Dim File As Object    'SWbemObjectEx
    Dim i As Long
    
    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = Locator.ConnectServer
    Set Files = Service.ExecQuery("Select * From CIM_DataFile " _
                            & "Where Drive = 'C:'" _
                            & " And Path = '\\Data\\'" _
                            & " And FileName Like '%Sample%'" _
                            & " And Extension Like 'xls%'")

    Cells.Clear
    Range("A1").Resize(1, 4).Value = _
        Array("ファイル名", "ファイルサイズ(byte)", "作成日", "最終更新日")
    
    i = 2
    For Each File In Files
        Cells(i, 1).Value = File.Filename & File.Extension
        Cells(i, 2).Value = Format(File.Filesize, "#,##0")
        Cells(i, 3).Value = _
            Format(Left(File.CreationDate, 14), "@@@@/@@/@@ @@:@@:@@")
        Cells(i, 4).Value = _
            Format(Left(File.LastModified, 14), "@@@@/@@/@@ @@:@@:@@")
        i = i + 1
    Next File
End Sub

サンプルでは、FileNameプロパティとExtentionプロパティを使ってファイル名を出力していますが、次のプロパティを使ってフルパスやパスの一部を取得することも可能です。
ただし、アルファベットがすべて小文字に置き換えられるプロパティもあるので、大文字/小文字を区別したい場合は注意してください。

「C:\Data\201209Sample.XLS」の場合

Nameプロパティ         c:\data\201209sample.xls
Driveプロパティ        c:
Pathプロパティ         \data\
FileNameプロパティ     201209Sample
Extentionプロパティ    XLS