【VBA/EXCEL】指定フォルダ内のファイル一覧の取得

はじめに

  • VBAで指定フォルダ内のファイル一覧を取得するプログラムを作ります。
  • 開発及び実行環境はWindowsを前提にしています。
  • インストール等不要なBatchやVBScriptや、人気のPythonでやってもよいのですが事務作業で馴染みやすいVBAでやっていこうと思います。

ファイル一覧取得

基本となるソースコードは以下を参考にしています。 excel-ubara.com



FileSystemObjectを使用するため、予め「ツール」→「参照設定」からMicrosoft Scripting Runtimeを有効にしておく必要があります。

プログラムの大まかなかな流れとしては、

  1. フォルダ選択するためのダイアログ操作
  2. 結果出力シートの初期化
  3. サブフォルダ一覧の取得
  4. ファイル一覧の取得

となります。

以下が、全体のソースコードです。

Sub ファイル一覧()
    Dim objFso As FileSystemObject
    Dim objFldr As Folder
    Dim objSubFldr As Folder
    Dim objFile As File
    Dim strDir As String
    Dim i As Long

    'フォルダの選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択"
        .AllowMultiSelect = False
        If .Show = -1 Then
            strDir = .SelectedItems(1) & ""
        Else
            Exit Sub
        End If
    End With

    Set objFso = New FileSystemObject
    If Not objFso.FolderExists(strDir) Then
        MsgBox ("指定のフォルダは存在しません")
        Exit Sub
    End If

    Cells.ClearContents
    Cells(1, 1) = strDir
    Cells(3, 1) = "ファイル名"
    Cells(3, 2) = "サイズ"
    Cells(3, 3) = "更新日時"

    i = 4
    
    'サブフォルダ一覧取得
    Set objFldr = objFso.GetFolder(strDir)
    For Each objSubFldr In objFldr.SubFolders
        Cells(i, 1) = objSubFldr.Name
        i = i + 1
    Next

  
    'ファイル一覧取得
    For Each objFile In objFldr.Files
        With objFile
            Cells(i, 1) = .Name
            Cells(i, 2) = WorksheetFunction.RoundUp(.Size / 1024, 0)
            Cells(i, 2).NumberFormatLocal = "0 ""KB"""
            Cells(i, 3) = .DateLastModified
            i = i + 1
        End With
    Next

    Set objFso = Nothing
    Set objFldr = Nothing
    Set objSubFldr = Nothing

End Sub


実行すると、「フォルダを選択」ウィンドウが起動します。 ファイル一覧を取得したいフォルダを選択します。 今回はtestフォルダを選択します。

f:id:indonegiyaland:20220406140113p:plain
フォルダ指定


また、testフォルダの内容は以下の通りです。

f:id:indonegiyaland:20220406140314p:plain
testフォルダ


ファイル一覧の取得結果は以下の通り出力します。

f:id:indonegiyaland:20220406144652p:plain
一覧

おわり

  • サブフォルダも含めたファイル一覧の取得や、EXCELのシート名一覧取得もやろうと思います。