大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、フォルダ内のすべてのサブフォルダと、ファイルの一覧を取得するには、「FileSystemObject」を再帰的に使うとできます。VBAを使って、フォルダやファイルの解析を自動化していきましょう。

はじめに

この記事では、フォルダ内のサブフォルダとファイルの、一覧を取得する方法について、ご紹介します。

フォルダ内の「ファイル」を取得するには、「.GetFolder(フォルダパス).Files」を使うとできます。

フォルダ内の「サブフォルダ」を取得するには、「.GetFolder(フォルダパス).SubFolders」を使います。

フォルダ内の「すべてのサブフォルダ」を取得するには、「.GetFolder(フォルダパス).SubFolders」を再帰的に使うとできます。

フォルダ内の「すべてのファイル」を取得するには、「.GetFolder(フォルダパス).SubFolders」を再帰的に使って、「.GetFolder(フォルダパス).Files」ですべてのファイルを取得するという感じです。

VBAで、フォルダやファイルの解析を自動化していきましょう。

では、フォルダ内のサブフォルダとファイルの、一覧を取得する方法について、解説していきます。

この記事を読むメリット

  • フォルダ内のすべてのサブフォルダとファイルの一覧を取得する方法がわかります。

本記事の内容を動画でまとめています

目次から見たい項目へ移動すると便利ですよ。

目次

フォルダ内のファイルやサブフォルダを取得

フォルダ内のファイルやサブフォルダを取得してみます。

ファイル一覧を取得

フォルダ内の「ファイル一覧」を取得してみます。

フォルダ構成はこんな感じになってます。

フォルダ構成

フォルダ構成はこんな感じになってます

ファイル一覧を取得するには、「.GetFolder(フォルダパス).Files」を使います。

Sub TEST1()
    
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Dim A, B
    A = "C:\Users\User\Desktop\DATA"
    
    'フォルダ内のファイルをループ
    For Each B In FSO.GetFolder(A).Files
        Debug.Print B 'ファイルパスを取得
    Next
    
End Sub

実行すると、フォルダ内のファイル一覧を作成できます。

ファイル一覧を取得できた

フォルダ内のファイル一覧を作成できました

フォルダ内のファイル一覧を作成できました。

サブフォルダ一覧を取得

次は、フォルダ内の「サブフォルダ一覧」を取得してみます。

フォルダ構成はこんな感じになっています。

フォルダ構成

フォルダ構成はこんな感じになっています

「サブフォルダ一覧」を取得するには、「.GetFolder(フォルダパス).SubFolders」を使います。

Sub TEST2()
    
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Dim A, B
    A = "C:\Users\User\Desktop\DATA"
    
    'フォルダ内のサブフォルダをループ
    For Each B In FSO.GetFolder(A).SubFolders
        Debug.Print B 'サブフォルダのパスを取得
    Next
    
End Sub

実行すると、フォルダ内のサブフォルダの一覧を作成できます。

フォルダ一覧を取得できた

フォルダ内のサブフォルダの一覧を作成できました

フォルダ内のサブフォルダの一覧を作成できました。

フォルダ内のすべてのサブフォルダとファイルを取得

次は、フォルダ内の「すべて」の「サブフォルダ」と「ファイル」を取得してみます。

フォルダ内にさらにフォルダがあって、フォルダに階層がある場合は、「.GetFolder」を再帰的に使います。

すべてのサブフォルダ一覧を取得

「すべてのサブフォルダ一覧」を取得してみます。

フォルダ構成はこんな感じで、階層があります。

フォルダ構成

フォルダ構成はこんな感じになっています

次のように「.GetFolder」を再帰的に使います。

Sub TEST3()
    
    Dim A
    A = "C:\Users\User\Desktop\DATA"
    
    Call TEST4(A)
    
End Sub
Sub TEST4(A)
    
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Dim B
    
    'フォルダ内のサブフォルダをループ
    For Each B In FSO.GetFolder(A).SubFolders
        Debug.Print B 'サブフォルダのパスを取得
        Call TEST4(B) '再帰する
    Next
    
End Sub

実行すると、フォルダ内のすべてのサブフォルダの一覧を作成できます。

すべてのサブフォルダ一覧を取得できた

フォルダ内のすべてのサブフォルダの一覧を作成できました

フォルダ内のすべてのサブフォルダの一覧を作成できました。

「.GetFolder」を再帰的に使った場合、フォルダ内を探索する順番はこんな感じになります。

探索する順番

フォルダ内を探索する順番はこんな感じになります

という感じで、探索します。

さらに深い階層のフォルダがなくなるまで、探索してくれます。

すべてのファイル一覧を取得

次は、「すべてのファイル一覧」を取得してみます。

フォルダ構成はこんな感じになっています。

フォルダ構成

フォルダ構成はこんな感じになっています

ファイルの一覧を取得したい場合は、「GetFolder」を再帰的に使って、「GetFolder(フォルダパス).Files」でファイル一覧を取得する、という流れになります。

Sub TEST5()
    
    Dim A
    A = "C:\Users\User\Desktop\DATA"
    
    Call TEST6(A)
    
End Sub
Sub TEST6(A)
    
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Dim B
    'フォルダ内のファイルをループ
    For Each B In FSO.GetFolder(A).Files
        Debug.Print B 'ファイルパスを取得
    Next
        
    Dim C
    'フォルダ内のサブフォルダをループ
    For Each C In FSO.GetFolder(A).SubFolders
        '再帰する
        Call TEST6(C)
    Next
    
End Sub

実行すると、すべてのファイル一覧を取得することができます。

すべてのファイル一覧を取得できた

すべてのファイル一覧を取得することができました

すべてのファイル一覧を取得することができました。

フォルダ解析をしてみる

すべてのサブフォルダやファイルを取得できれば、フォルダの解析をすることができます。

フォルダ構成

先ほど使ったフォルダ構成で、フォルダの解析をしてみます。

フォルダ構成

フォルダ構成はこんな感じになっています

では、解析してみます。

すべてのファイル一覧表を作成

フォルダ内の。すべてのファイル一覧表を作成して、フォルダを解析してみます。

シートに入力したいので、変数が入力できるように変更します。

ファイル名や、拡張子、ファイルやフォルダのサイズ、作成日時、更新日時、アクセス日時などを取得してみます。

Sub TEST7()
    
    Dim A
    A = "C:\Users\User\Desktop\DATA"
    
    i = 1
    Call TEST8(A, i)
    
End Sub
Sub TEST8(A, i)
    
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
        
    With ActiveSheet
        
        Dim B
        'フォルダ内のファイルをループ
        For Each B In FSO.GetFolder(A).Files
            i = i + 1
            .Cells(i, 1) = A 'フォルダパス
            .Cells(i, 2) = B 'ファイルパス
            .Cells(i, 3) = FSO.GetFileName(B) 'ファイル名
            .Cells(i, 4) = FSO.GetExtensionName(B) '拡張子
            .Cells(i, 5) = FSO.GetFile(B).Size 'サイズ
            .Cells(i, 6) = FSO.GetFile(B).DateCreated '作成日時
            .Cells(i, 7) = FSO.GetFile(B).DateLastModified '更新日時
            .Cells(i, 8) = FSO.GetFile(B).DateLastAccessed 'アクセス日時
        Next
        
        Dim C
        'フォルダ内のサブフォルダをループ
        For Each C In FSO.GetFolder(A).SubFolders
            i = i + 1
            .Cells(i, 1) = C. 'フォルダパス
            .Cells(i, 5) = FSO.GetFolder(C).Size 'サイズ
            .Cells(i, 6) = FSO.GetFolder(C).DateCreated '作成日時
            .Cells(i, 7) = FSO.GetFolder(C).DateLastModified '更新日時
            .Cells(i, 8) = FSO.GetFolder(C).DateLastAccessed 'アクセス日時
            '再帰する
            Call TEST8(C, i)
        Next
        
    End With
    
End Sub

ファイルパスやフォルダパスから、ファイル名や、拡張子、サイズ、作成日時、更新日時、アクセス日時などを取得する方法について、詳細はこちらでまとめています。

実行すると、すべてのフォルダとファイルの値を取得することができます。

すべてのフォルダとファイルの値を取得できた

すべてのフォルダとファイルの値を取得することができました

すべてのフォルダとファイルの値を取得することができました。

こんな感じで、フォルダの解析をすることができます。

フォルダの解析ができれば、不要なファイルやフォルダを洗い出して、データをすっきりさせることができますね。

おわりに

この記事では、フォルダ内のサブフォルダとファイルの、一覧を取得する方法について、ご紹介しました。

フォルダ内の「ファイル」を取得するには、「.GetFolder(フォルダパス).Files」を使うとできます。

フォルダ内の「サブフォルダ」を取得するには、「.GetFolder(フォルダパス).SubFolders」を使います。

フォルダ内の「すべてのサブフォルダ」を取得するには、「.GetFolder(フォルダパス).SubFolders」を再帰的に使うとできます。

フォルダ内の「すべてのファイル」を取得するには、「.GetFolder(フォルダパス).SubFolders」を再帰的に使って、「.GetFolder(フォルダパス).Files」ですべてのファイルを取得するという感じです。

VBAで、フォルダやファイルの解析を自動化していきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す