【Excelマクロ】フォルダ内のファイルの一覧と更新時間を取得する

効率化

Excelで、サブフォルダも含めたファイルの一覧とファイルの更新時間を取得するマクロを紹介します。
ファイル一覧の取得ついでに、ハイパーリンクで一覧からすぐにファイルにアクセスできるようにもしておきます。
所定のファイルが揃っているか確認する時などに使えると思います。

では早速、内容を紹介します。

フォルダ内のファイルの一覧と更新時間を取得する
フォルダ内のファイルの一覧と更新時間を取得する

ワークシート側

ワークシートの見た目はこんな感じです。(ファイルの一覧を取得後の状態)

使い方は下記の通りです。

  1. B1セルにファイルの一覧を取得するパスを指定する。
  2. B2セルに一覧化するファイルのフィルタ条件を指定する。
    (DIRコマンドのオプション相当。「*」なら全て、「*.xlsx」なら拡張子が.xlsxのものだけ、とか)
  3. マクロ「ファイル一覧取得」を実行する。
  4. 4行目以降に、ファイルへのリンク、フォルダ名、ファイル名、更新時間、の順に出力される。

マクロ側

※このマクロを実行するためには、VBAエディタのメニュー > ツール > 参照設定で「Microsoft Scripting Runtime」を参照するように設定しておいてください。

前述のワークシートのレイアウトだとして、マクロは下記のようになります。

Sub ファイル一覧取得()
    Dim パス As String
    Dim フィルタ As String
    Dim 出力行Index As Long
    
    Range("A4:D1048576").ClearContents 'ファイル一覧をクリアする
    
    パス = Cells(1, 2)
    フィルタ = Cells(2, 2)
    出力行Index = 4
    
    Call ファイル一覧取得Sub(パス, フィルタ, 出力行Index) '
End Sub

Function ファイル一覧取得Sub(ByVal パス As String, ByVal フィルタ As String, ByVal 出力行Index As Long)
    Dim fso As New Scripting.FileSystemObject '
    Dim fileo As File
    Dim foldero As Folder
    Dim ファイル名 As String
    
    If Right(パス, 1) <> "\" Then
        パス = パス + "\"
    End If
    
    ファイル名 = Dir(パス &amp; フィルタ)
    
    Do While ファイル名 <> ""
        Set fileo = fso.GetFile(パス &amp; ファイル名)
        
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(出力行Index, 1), _
            Address:=パス &amp; ファイル名, _
            TextToDisplay:="■" 'リンク
        Cells(出力行Index, 2) = fileo.ParentFolder 'フォルダ名
        Cells(出力行Index, 3) = fileo.Name 'ファイル名
        Cells(出力行Index, 4) = fileo.DateLastModified '更新日付
        
        出力行Index = 出力行Index + 1
        ファイル名 = Dir()
    Loop
    
    'サブフォルダのファイル一覧を取得する
    For Each foldero In fso.GetFolder(パス).SubFolders
        Call ファイル一覧取得Sub(foldero.path, フィルタ, 出力行Index)
    Next

End Function

まとめ

以上で、Excel上でファイルのリストを取得することができるようになります。
一覧を取得したファイルに対して定型処理をするような場合、Excelで一覧取得と定型処理をまとめて実行するのもよいですね。

ちなみに、ファイルの一覧と更新時間を取得するのであれば、コマンドプロンプトでdirコマンドを使えば取得できます。
単発でファイルのリストを取得したいのであれば、そちらの方が手っ取り早いでしょう。

Excel

Posted by moto2g