このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【フォルダ階層をリスト化】Excelマクロの便利ツール

2022年9月28日

フォルダ内が悪魔の巣窟みたいになって困ったことありませんか?

何のデータが入っているかフォルダ名を見ても分からなくなったり。
最新バージョンのファイルが分からなくなったり。

引き継ぎの時にはもっと困りますよね。引き継ぐ方も教えるのが大変だし、引き継がれる方も大変。

そんな困りごとを解決するために、フォルダ/ファイルリストの自動作成ツールを作成しました。

Excelマクロで作成しているので、Excelが入っていれば誰でも使えます。

お手軽にフォルダ/ファイル一覧が作れるので、活用してみてください。

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

動作内容

ドキュメント作成1
フォルダ選択
フォルダ/ファイル一覧

説明書を作成したいフォルダを選択してOK
すると、2個目の画像のようにフォルダ/ファイル名の一覧が自動作成されます。

フォルダは先頭に■が付きます。
そして、フォルダは■の数で、ファイルは空白の数で、フォルダ階層の深さが分かるようになっています。

これを全自動で作成してくれます。

これを見れば、どのフォルダに何のファイルが入っているか、ぱっと見で分かりますよね。

あとは、重要なフォルダなどに説明(B列)を書き込めば一覧表の完成です。

C列にフォルダ/ファイルのリンクも自動作成しているため、ワンクリックで目的の場所へと飛ぶこともできます。

ソースコード

FileSystemObjectを使用しているため、「Microsoft Scripting Runtime」の参照設定をしてください。(やり方は下記記事参照)

VBEに下記コードを貼りつけて実行すれば動作します。

Option Explicit
Private fso As FileSystemObject
Private colInfo As Collection
Private Const fldrMark = "■"
Private Const fileMark = " "
Sub FileDoc()
   'フォルダ/ファイル一覧の自動作成ツール
   'アクティブシート上にフォルダ/ファイル名とリンクを自動生成
   
   'トップフォルダPathの取得
   Dim topFolderPath As String
   With Application.FileDialog(msoFileDialogFolderPicker)
       .Title = "ドキュメント生成したいフォルダを選択"
       .Show
       If .SelectedItems.Count = 0 Then MsgBox "フォルダを選んでください": Exit Sub
       topFolderPath = .SelectedItems(1)
   End With
   
   'インスタンスの生成
   Set fso = New FileSystemObject
   Set colInfo = New Collection
   
   '見出し
   colInfo.Add Split("フォルダorファイル名,説明,リンク", ",")
   
   '再帰的にフォルダおよびファイル情報を取得
   Call WriteInfo(topFolderPath, 1)
   
   'アウトプット
   Application.ScreenUpdating = False '高速化処理
   Dim oneInfo As Variant, row_i As Long
   With ActiveSheet
       For Each oneInfo In colInfo
           row_i = row_i + 1
           '見出しのみ分岐
           If row_i = 1 Then
               .Cells(row_i, 1).Resize(, 3) = oneInfo
           Else
               .Cells(row_i, 1).Resize(, 2) = oneInfo
               .Hyperlinks.Add anchor:=.Cells(row_i, 3), Address:=oneInfo(2), TextToDisplay:=oneInfo(2)
           End If
       Next
       .Columns.AutoFit
   End With
   
   '終了処理
   Application.ScreenUpdating = True
   Set fso = Nothing
   Set colInfo = Nothing
   
End Sub
Private Sub WriteInfo(folderPath As String, stairs As Long)
   'folderPath内のフォルダおよびファイル情報を再帰的にcolInfoへ追加
   'stairsの数だけフォルダ/ファイル名の先頭に■/スペースを入れる
   On Error Resume Next 'アクセス不可能なフォルダ/ファイル対策
   Dim fldr As Object
   Set fldr = fso.GetFolder(folderPath)
   
   'フォルダ情報の取得
   colInfo.Add Array(String(stairs, fldrMark) & fldr.Name, "", fldr.Path)
   
   'ファイル情報の取得
   Dim oneFile As File
   For Each oneFile In fldr.Files
       colInfo.Add Array(String(stairs, fileMark) & oneFile.Name, "", oneFile.Path)
   Next
   
   '再帰処理(下位フォルダ)
   Dim oneFldr As Object
   For Each oneFldr In fldr.SubFolders
       Call WriteInfo(oneFldr.Path, stairs + 1)
   Next
   On Error GoTo 0
   
End Sub

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

VBA

Posted by やろまい