Excel VBA:サブフォルダも含めたファイル一覧を再帰的に作成する

FileSystemObjectを使い、サブフォルダも含めたフォルダ内のファイル一覧を作成するVBAを掲載しています。



Homeに戻る > Excel ファイル操作のTipsへ

掲載済みの「Excel VBA:フォルダ内のファイルリストを作成|サイズや日時も」で、FileSystemObjectオブジェクトのGetFolderメソッドを使ったVBAを掲載しました。

GetFolderメソッドについても、そこで詳しい解説を掲載していますので参照してください。

ここではGetFolderメソッドのSubFoldersプロパティを使用し、サブフォルダのファイル一覧を取得します。

SubFoldersプロパティは、フォルダ内の全てのサブフォルダを取得できます。

方法は下記のようになります。

  1. ルートフォルダのファイル一覧を作成します。
  2. 一つ目のサブフォルダがあれば、再帰呼び出しを行いファイル一覧を作成します。
  3. 一つ目のサブフォルダのサブフォルダがあれば、、再帰呼び出しを行いファイル一覧を作成します。
  4. 一つ目のサブフォルダのサブフォルダがなくなるまで、これを繰り返します。
  5. さらに2つ目以降のサブフォルダも、サブフォルダがなくなるまで同様に行います。

再帰的とは、自分が行っている処理から自分を呼び出す処理のことです。

ここでは、ExGetFileListプロシージャ内、ExGetFileListプロシージャを呼び出しています。

下記のVBAを、デバッグのステップ インで実行すれば流れが良く分かります。


このVBAを応用した「Excelでフォルダ内文字列検索ソフトを作ってみよう Step 2 フォルダ内ファイル一覧の作成」を掲載していますので参照してください。



サブフォルダを含めた、フォルダ内のファイル一覧を作成するVBA


ExcelシートとVBA入力画面

下画像のようにコマンドボタンを配置し、コマンドボタンのクリックイベントのVBE画面を呼び出します。

Excelシート画面

コマンドボタンクリックイベントと、ExGetFileListプロシージャを下記のように入力します。

VBA入力画面

VBAコードの解説

ほぼ「Excel VBA:フォルダ内のファイルリストを作成|サイズや日時も」と同じなので、そこでの解説を参照してください。

追加部分は下記になります。

  1. For Each tSub In tGf.SubFoldersでサブフォルダの数だけループします。
  2. 再帰呼び出しでファイル一覧を作成し、サブフォルダ以下のサブフォルダのファイル一覧を作成します。
  3. これをサブフォルダの数だけ繰り返します。

ExcelシートのVBAコード

Option Explicit

'Excel VBAでフォルダ内のファイルリストを作成
Private Sub ExGetFileList(strPath As String, lRow As Long)
    Dim tSfo As Object
    Dim tGf As Object
    Dim tFi As Object
    Dim tSub As Object
    
    Set tSfo = CreateObject("Scripting.FileSystemObject")
    Set tGf = tSfo.GetFolder(strPath)
    For Each tFi In tGf.Files
        'ファイル名
        Cells(lRow, 2) = tFi.Name
        'パス内に含まれるファイルの拡張子を除いたものを取得
        Cells(lRow, 3) = tSfo.GetBaseName(tFi.Path)
        'ファイルの拡張子
        Cells(lRow, 4) = tSfo.GetExtensionName(tFi.Path)
        'フォルダ名
        Cells(lRow, 5) = tFi.ParentFolder.Path
        'ファイルサイズ KByte
        Cells(lRow, 6) = Int(tFi.Size / 1024)
        '作成された日付・時刻
        Cells(lRow, 7) = tFi.DateCreated
        'ファイルの最終更新された日付・時刻
        Cells(lRow, 8) = tFi.DateLastModified
        'ファイルの最終アクセスの日付・時刻
        Cells(lRow, 9) = tFi.DateLastAccessed
        lRow = lRow + 1
    Next
  
    For Each tSub In tGf.SubFolders
        ExGetFileList tSub.Path, lRow
    Next
End Sub

Private Sub CommandButton1_Click()
    ExGetFileList "e:\mydir", 4
End Sub

実行したExcelシート

8行名からサブフォルダのファイル一覧が表示されているのが分ります。
実行したExcelシート



Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved