【Excel VBA】ファイルの一覧を取得する

当ページのリンクには広告が含まれている可能性があります。
VBAファイルの一覧取得

こんにちは。ユーキです。

今日は、ファイルの一覧を作成するプログラムを作ってみたいと思います。

目次

ファイルの一覧を取得

ファイルの取得には、「Scripting.FileSystemObject」オブジェクトを使用します。取得した結果はコンソールに出力するようにしています。

Public Sub FileList()
    Dim fs As Object
    Dim f As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    For Each f In fs.GetFolder("C:\Temp").Files
        Debug.Print f.Name
    Next f
End Sub

フルパスを取得する

フルパスを表示するには、Fileオブジェクトのプロパティで取得可能です。Nameプロパティをファイル名となります。

これらを利用して、取得結果をExcelのシートに出力してみたいと思います。

Public Sub FileList()
    Dim fs As Object
    Dim f As Object
    Dim rowIdx As Long
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    '先頭行を設定。4行目からスターとするようにします。
    rowIdx = 4
    For Each f In fs.GetFolder("C:\Temp").Files
        ActiveSheet.Cells(rowIdx, 2).Value = f.Path 'B列にフルパスを表示
        ActiveSheet.Cells(rowIdx, 3).Value = f.Name 'C列にファイル名を表示
        rowIdx = rowIdx + 1
    Next f
End Sub

サブフォルダ取得(再帰的呼び出し)

ファイル取得部分を関数化して、再帰的呼び出しを実施し、サブフォルダのファイルも取得できるようにしてみましょう。
表示項目は、個人的に欲しいという思う内容を出力するようにしました。

Public Sub FileList()
    Dim rowIdx As Long
    Dim path As String
    path = "C:\Temp"
    
    '先頭行を設定。4行目からスターとするようにします。
    rowIdx = 4
    Call OutputFileList(ActiveSheet, path, rowIdx, "")
    
End Sub
Private Sub OutputFileList(sh As Worksheet, ByRef path As String, rowIdx As Long, folderName As String)
    Dim fs As Object
    Dim f As Object
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    For Each f In fs.GetFolder(path).Files
        ActiveSheet.Cells(rowIdx, 2).Value = f.path 'B列にフルパスを表示
        ActiveSheet.Cells(rowIdx, 3).Value = f.Name 'C列にファイル名を表示
        ActiveSheet.Cells(rowIdx, 4).Value = folderName 'フォルダ名(サブフォルダ以降で表示)
        ActiveSheet.Cells(rowIdx, 5).Value = f.ParentFolder  'フォルダパス
        
        rowIdx = rowIdx + 1
    Next f
    
    'サブフォルダ
    For Each f In fs.GetFolder(path).SubFolders
        Call OutputFileList(sh, f.path, rowIdx, f.Name)
    Next f
End Sub

ボタン追加

最後に、ボタンを押して実行できるようにしてみます。ボタンの追加については、ボタンを追加してみよう を参照ください(サンプルではプロパティ等を編集しています。この編集の仕方もいつか記事にしたいと思います)。

Private Sub btnFileList_Click()
    Call FileList
End Sub

ついでに出力先のシートにも、列タイトル等をつけておきます。

出力先シート(出力前)

ボタンを押して実行してみましょう。結果は以下のようになります。
※セルの書式を「文字」としています(標準などにすると、「001」などのフォルダ名が「1」となってしまいます)

出力結果

最後に

取得ファイルのパスの指定についても、Excelに入力した内容から取得するように変更すれば、できることの幅は広がると思います。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次