Excel VBA 選択した位置のファイルとフォルダのツリー構造を見やすく表示する方法・ファイル管理を効率化
Excel VBAでディレクトリ構造を一目で把握!初心者でもできるフォルダツリー表示の作り方(自動化・業務効率化)
Excel VBAは、単なるデータ処理ツール以上の可能性を秘めています。特にファイルやフォルダの整理・管理に関しては、その効果を存分に発揮します。今回は、Excel VBAを用いて、任意のフォルダからサブフォルダやファイルまでのツリー構造を視覚的に表示する方法をご紹介します。この技術は、ファイル管理の効率化はもちろん、プログラミング初心者にとっても理解しやすい実例として最適です。
具体的なVBAコードからその実行結果まで、段階的かつ詳細に解説。初心者の方でも簡単にフォローできる内容となっています。フォルダ選択のダイアログボックスを表示させることから始め、選択されたフォルダ内の全ファイルとサブフォルダをツリー形式でExcelシートに表示する方法を学びます。このプロセスを通じて、VBAの基本的な操作方法やオブジェクトの扱い方を自然と身に付けることができます。
VBAを学び始めたばかりの方、あるいは効率的なファイル管理方法を探している方にとって、この記事はきっと有益な情報源となるでしょう。さぁ、Excel VBAの世界で新たな一歩を踏み出しましょう!
●【EXCEL VBA業務効率化の秘訣、業務で活用できる便利な自動フォルダ生成テクニック3選は、下記を参照して下さい】
●【FileSystemObject オブジェクト、下記を参照して下さい】(Microsoft社 様)】
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/filesystemobject-object
Excel VBAでフォルダ構造を簡単に可視化!フォルダ内のすべてを見せる – Excelでツリー表示の作成・ファイル管理の効率化テクニック①
今回説明するプログラムは、ファイルとフォルダの構造を一覧表示する方法をご紹介します。このテクニックは、選択したフォルダ内の全ファイルとサブフォルダをExcelシートに自動的にリストアップします。これにより、ファイル管理が劇的に簡単になります。VBA初心者でも理解しやすいように、コードの行ごとの説明、処理手順の詳細、サンプルデータ形式、注意事項、そして実行結果の解説を一つ一つ分かりやすく解説していきます。
具体的には、ユーザーが選択したフォルダの構造(サブフォルダとファイル)をExcelのワークシートにツリー形式で表示するためのものです。フォルダ名は「【】」で囲まれ、ファイル名は先頭に「*」が付けられて表示されます。
この記事を読めば、あなたもExcel VBAでフォルダツリーを作成し、ファイル管理の効率を高めることができます。さあ、VBAの魔法で日々の作業を楽にしましょう!
【プログラムの流れ】
1.ユーザーにフォルダ選択のダイアログボックスを表示し、フォルダを選択させます。
2.選択されたフォルダのパスを取得します。
3.FileSystemObjectを使用してフォルダオブジェクトを取得します。
4.表示を開始するExcelの行番号を1に設定します。
5.ListFoldersサブプロシージャを呼び出し、フォルダとファイルのツリーを表示します。
6.Excelの列幅を自動調整します。
【プログラム実行条件・注意事項】
1.選択するフォルダは、空のフォルダでも問題ありません。
2.フォルダ内にサブフォルダが存在しない場合は、フォルダ名のみが表示されます。
3.フォルダ内にファイルが存在しない場合は、フォルダ名の後に「*」が表示されます。
4.ユーザーがフォルダ選択をキャンセルした場合、プログラムは終了します。
5.Excelの列幅が自動調整されるため、長いファイル名は切り捨てられることがあります。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● ShowFolderTree01 (サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
' ' 外部宣言 - 厳格な変数宣言を強制 Option Explicit ' ShowFolderTreeサブルーチンの定義開始 Sub ShowFolderTree() ' 変数の宣言 Dim fs As Object, folder As Object, subfolder As Object Dim path As String, row As Integer ' ファイルダイアログを使用してユーザーにフォルダを選択させる With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択してください" ' ダイアログのタイトル設定 .AllowMultiSelect = False ' 複数選択を不可に設定 If .Show <> -1 Then Exit Sub ' ダイアログがキャンセルされた場合、サブルーチンを終了 path = .SelectedItems(1) ' 選択されたフォルダのパスを取得 End With ' ファイルシステムオブジェクトを作成し、選択されたフォルダを取得 Set fs = CreateObject("Scripting.FileSystemObject") Set folder = fs.GetFolder(path) row = 1 ' シートの開始行を設定 ' ListFoldersを呼び出し、フォルダとファイルのツリーを表示 ListFolders folder, row, "" ' 列幅を自動調整 Columns("A:A").AutoFit End Sub ' ListFoldersプライベートサブルーチンの定義開始 Private Sub ListFolders(ByVal folder As Object, ByRef row As Integer, ByVal indent As String) Dim subfolder As Object, file As Object ' 変数宣言 Dim ws As Worksheet ' ワークシート変数の宣言 Set ws = ThisWorkbook.Sheets(1) ' ワークシート1を設定 ' フォルダ名をインデント付きで表示 ws.Cells(row, 1).Value = indent & "【" & folder.Name & "】" row = row + 1 ' 行番号を+1加算 ' サブフォルダを再帰的に処理 For Each subfolder In folder.SubFolders ListFolders subfolder, row, indent & " " ' インデントを追加して呼び出し Next subfolder ' フォルダ内の全ファイルを表示 For Each file In folder.Files ws.Cells(row, 1).Value = indent & " *" & file.Name row = row + 1 ' 行番号を+1加算 Next file End Sub ' ' |
(画面クリックして拡大)
Excel VBAでファイルエクスプローラーを作成しよう!フォルダツリーの自動表示法・フォルダーとファイルを簡単にリストアップ
今回説明するプログラムは、サンプルプログラムの応用となります。サンプルプログラム①と同様にファイルとフォルダーの構造を一覧表示しますが、追加機能として「更新日時」・「種類」・「サイズ」を表示するように機能を追加しました。サンプル①と同様に、ユーザーが選択したフォルダの構造(サブフォルダとファイル)をExcelのワークシートにツリー形式で表示するためのものです。フォルダ名は「【】」で囲まれ、ファイル名は先頭に「*」が付けられて表示されます。
【プログラムの流れ】
1.ユーザーにファイルダイアログでフォルダを選択させる。
2.選択されたフォルダのパスを取得。
3.FileSystemObjectを作成し、指定されたフォルダのオブジェクトを取得。
4.Excelシートの既存データをクリア。
5.選択されたフォルダとその中のファイル、サブフォルダをシートにリストアップ(再帰的に)。
6.表示された列の幅を自動調整。
【プログラム実行条件・注意事項】
1.FileSystemObjectを使用するため、マクロのセキュリティ設定を確認する必要があります。
2.実行前にExcelに適切なシートが存在することを確認してください。
3.ファイルパスが長い場合、Excelのセルに収まらない可能性があります。
4.大量のファイルやサブフォルダがある場合、処理に時間がかかる可能性があります。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● ShowFolderTree02(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
’ ’ Option Explicit ' メインプロシージャ Sub ShowFolderTree02() ' オブジェクト変数の宣言 Dim fs As Object, folder As Object, subfolder As Object Dim path As String, row As Integer, LastLow As Long ' ユーザーにフォルダを選択させる With Application.FileDialog(msoFileDialogFolderPicker) .Title = "フォルダを選択してください" ' ダイアログのタイトル設定 .AllowMultiSelect = False ' 複数選択不可 If .Show <> -1 Then Exit Sub ' ダイアログを表示し、選択がなければ終了 path = .SelectedItems(1) ' 選択されたフォルダのパスを取得 End With ' FileSystemObjectの作成とフォルダオブジェクトの取得 Set fs = CreateObject("Scripting.FileSystemObject") Set folder = fs.GetFolder(path) ' Excelの操作開始 row = 2 ' 開始行 LastLow = Cells(Rows.Count, "A").End(xlUp).Row ' 既存データの最終行を取得 Range("A2:D" & LastLow + 1).ClearContents ' 既存データをクリア ' フォルダとファイルのツリーをリストアップ ListFolders folder, row, "" ' 列幅の自動調整 Columns("A:D").AutoFit End Sub ' フォルダとファイルをリストアップする再帰的サブプロシージャ Private Sub ListFolders(ByVal folder As Object, ByRef row As Integer, ByVal indent As String) Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) ' ワークシートの設定 ' フォルダ名と詳細をシートに表示 ws.Cells(row, 1).Value = indent & "【" & folder.Name & "】" ws.Cells(row, 2).Value = folder.DateLastModified ws.Cells(row, 3).Value = "フォルダー" row = row + 1 ' サブフォルダを再帰的に処理 Dim subfolder As Object For Each subfolder In folder.SubFolders ListFolders subfolder, row, indent & " " Next subfolder ' 各ファイルをリストアップ Dim file As Object For Each file In folder.Files ws.Cells(row, 1).Value = indent & " *" & file.Name ws.Cells(row, 2).Value = file.DateLastModified ws.Cells(row, 3).Value = "ファイル" ws.Cells(row, 4).Value = file.Size / 1024 ' ファイルサイズをKBで表示 row = row + 1 Next file End Sub ’ ’ |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。