フォルダの階層構造を書き出してみる ② ついでにファイルも

先日、いただいたリクエストに応えて、フォルダの階層構造を書き出してみた。
infoment.hatenablog.com

といっても、過去記事の焼き直しで、目新しいものは何もない。
ならば、もう少しだけ機能を拡張してみよう。

ということで今回は、ついでにファイル名も書き出してみることにした。
f:id:Infoment:20200707230424p:plain

まず書き出しのため、先日準備したフォルダ下に、テスト用ファイルを作成。
f:id:Infoment:20200707231042p:plain

次いで、ユーザー定義関数に「書き出し内容にファイル名を含めるか」のBoolean型変数を設けてみた。

Function Tree(folder_path As String, _
     Optional contain_filename As Boolean = False) As Variant
     
    Select Case contain_filename
        Case True
            Tree = Split(CreateObject("wscript.shell").exec("cmd /c tree """ & folder_path & """ /f").stdout.readall, vbCrLf)
        Case False
            Tree = Split(CreateObject("wscript.shell").exec("cmd /c tree """ & folder_path & """").stdout.readall, vbCrLf)
    End Select
End Function

先日とほぼ同じコードで、テストしてみよう。

Sub test()
    Dim arr As Variant
        arr = Tree("C:\Temp", True)
        Range("A1").Resize(UBound(arr) + 1) = WorksheetFunction.Transpose(arr)
End Sub

結果がこちら。
f:id:Infoment:20200707231744p:plain

おお、出来た!と思った直後、間髪を入れず、次のリクエストが届いた。

「書き出した各フォルダ名に、ショートカットが設定されていたら最高です」

そうですか、分かりました。次回に続きます。

参考まで。