【ExcelVBA】サブフォルダを含めたフォルダ名の一覧出力(WScript.Shell)

ExcelVBA, コマンドの操作, フォルダの操作

サブフォルダを含めたフォルダ名の一覧出力をする、サンプルマクロ(非推奨)です。

WScript.Shell をわざわざ使うのは実用的ではありませんし、Norton先生はマルウェアと判断してスクリプトを実行させてくれません(^-^;
なので、WScript.Shell を使わない一般的な方法の、こちら(推奨) をおすすめします。

◆出力結果の例◆
E:\opencv\opencv331\sources\apps\annotation
E:\opencv\opencv331\sources\apps\createsamples
E:\opencv\opencv331\sources\apps\interactive-calibration
E:\opencv\opencv331\sources\apps\traincascade
E:\opencv\opencv331\sources\apps\version
E:\opencv\opencv331\sources\apps\visualisation

イミディエイト画面に一括出力

Sub Sample()
    
    Dim DoSPath As String
    Dim DoSCmd As String
    
    DoSPath = """E:\Sample and Result"""
    DoSCmd = "dir /S /B /AD " & DoSPath
    
    Dim oWshShell As Variant
    Dim oExec As Variant
    Dim DoSResult As String
    Dim DoSLine  As Variant
    
    Set oWshShell = CreateObject("WScript.Shell")
    Set oExec = oWshShell.Exec("%ComSpec% /c " & DoSCmd)
    
    DoSResult = oExec.stdout.ReadAll
    Debug.Print DoSResult
    
    Set oExec = Nothing
    Set oWshShell = Nothing

End Sub
※6行目にフォルダパスを記入します。
※6行目にダブルクォートが左右にそれぞれ3個あるのは、スペース付きフォルダ名に対応させるためです。

イミディエイト画面に一行ずつ出力(ストリーム形式)

※メモリーの消費に優しいけど、出力処理が終わるまでDOS窓が開き続けます。
Sub Sample()
    
    Dim DoSPath As String
    Dim DoSCmd As String
    
    DoSPath = """E:\Sample and Result"""
    DoSCmd = "dir /AD /S /B " & DoSPath
    
    Dim oWshShell As Variant
    Dim oExec As Variant
    Dim DoSResult As String
    Dim DoSLine  As Variant
    
    Set oWshShell = CreateObject("WScript.Shell")
    Set oExec = oWshShell.Exec("%ComSpec% /c " & DoSCmd)
    
    While Not oExec.stdout.AtEndOfStream
      Debug.Print oExec.stdout.readline
    Wend
    
    Set oExec = Nothing
    Set oWshShell = Nothing

End Sub
※6行目にフォルダパスを記入します。
※6行目にダブルクォートが左右にそれぞれ3個あるのは、スペース付きフォルダ名に対応させるためです。

イミディエイト画面に一行ずつ出力

※初回実行は、DOS窓が閉じるまで時間がかかります。
※2回目実行は、メモリーに前回の記憶が残っていればストリーム形式よりDOS窓の閉じるスピードは早めです。
Sub Sample()
    
    Dim DoSPath As String
    Dim DoSCmd As String
    
    DoSPath = """E:\Sample and Result"""
    DoSCmd = "dir /S /B /AD " & DoSPath
    
    Dim oWshShell As Variant
    Dim oExec As Variant
    Dim DoSResult As String
    Dim DoSLine  As Variant
    
    Set oWshShell = CreateObject("WScript.Shell")
    
    Set oExec = oWshShell.Exec("%ComSpec% /c " & DoSCmd)
    
    DoSResult = oExec.stdout.readall
    
    For Each DoSLine In Split(DoSResult, vbCrLf)
      Debug.Print DoSLine
    Next
    
    Set oExec = Nothing
    Set oWshShell = Nothing

End Sub
※6行目にフォルダパスを記入します。
※6行目にダブルクォートが左右にそれぞれ3個あるのは、スペース付きフォルダ名に対応させるためです。

7行目の dirコマンドからオプション /AD を取り除くと、サブフォルダ内のファイル名を絶対パスで出力します。
サブフォルダ内のファイル名を絶対パスで出力 DoSCmd = "dir /S /B " & DoSPath