フォルダ内のファイル名とファイル情報の一覧を取得する(WMI)|Excel VBA |
フォルダ内のファイル名一覧を取得するにはいろいろな方法がありますが、ここでは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