Excelに任意のフォルダのファイル一覧を出力するマクロ

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

コメントを残す