Excelで任意のフォルダ配下の全てのフォルダ、ファイルの一覧を出力して確認したい場合は、以下のコマンドを実行するマクロを呼び出します。
実行するコマンドは2種類考えられます。
dir /a:-d /s
forfiles -s -p PATH -c “cmd /c echo @PATH @fsizebyte @fdate @ftime”
実行スピードは、前者>後者で、圧倒的にdirが優れているため、ファイル数が多い場合はdirを使用します。ただし、別途整形が必要となります。
直接フルパスで取得したい場合や整形した状態で取得したい場合はforfilesを使用するという使い分けとなります。
◆前提条件
以下のマクロを実行する前に、実行するExcelファイルで「Windows Script Host Object Model」の参照設定が完了している必要があります。
Sub CmdExec()
'コマンドプロンプトを使うためのオブジェクト
Dim wsh As New IWshRuntimeLibrary.WshShell
'コマンド結果を格納する変数
Dim result As WshExec
Dim cmd As String
Dim filedata() As String
Dim i As Long, j As Long
ReDim CellSet(49999, 2) '適切な値を設定
'実行したいコマンド
cmd = "forfiles -s -p " & "***任意のフォルダパス***" & " -c " & """cmd /c echo @PATH,,,@fsizebyte,,,@fdate"""
'コマンドを実行
Set result = wsh.exec("%ComSpec% /c " & cmd)
'結果を改行区切りで配列へ格納
filedata = Split(result.StdOut.ReadAll, vbCrLf)
'配列を分割して配列へ格納
i = 0
For Each filenm In filedata
If filenm <> "" Then
Dim Arr As Variant
Arr = Split(filenm, ",,,")
For j = 0 To UBound(Arr)
CellSet(i, j) = Arr(j)
Next j
i = i + 1
End If
Next
'1行ずつセルにセットするよりは
'配列をそのままExcelに貼り付けるほうが高速
Range("A5").Resize(50000, 3) = CellSet
Set result = Nothing
Set wsh = Nothing
End Sub