【VBA】指定したフォルダ配下のファイル一覧を取得する【Dir関数ではなくFileSystemObjectを推奨】

VBAで
 ・指定したフォルダ配下の
 ・ファイル一覧を取得
できます!

私は
 ・Dir関数ではなく
 ・FileSystemObjectを推奨
します!

VBAコード(FileSystemObjectを使用【推奨】)

ここでは例として
 ・FileSystemObjectを使用して
 ・デスクトップにあるフォルダ「test」配下の
 ・ファイル一覧を取得してシート「sample」へ出力
します。
※シート「sample」へ出力後、シート「sample」の列幅を自動調整します。

フォルダ「test」
フォルダ「test」配下には5ファイルある
フォルダ「test」配下には5ファイルある
Option Explicit

Sub sample()
    
    Dim inputFolder As String
    Dim outputWs As Worksheet
    Dim outputColumn As Long
    Dim outputRow As Long
    Dim fso As Object
    Dim file As Object

    '対象フォルダ
    inputFolder = "C:\Users\user\Desktop\test"
    '出力シート
    Set outputWs = Worksheets("sample")
    '出力列
    outputColumn = 2
    '出力行
    outputRow = 2
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'ファイル数分繰り返し
    For Each file In fso.GetFolder(inputFolder).Files
        '出力シートへファイル名を出力
        outputWs.Cells(outputRow, outputColumn) = file.Name
        '出力行をインクリメント
        outputRow = outputRow + 1
    Next
    
    '出力シートの出力列の列幅を自動調整
    outputWs.Columns(outputColumn).AutoFit
    
    '後片付け
    Set fso = Nothing
    
End Sub

以下を指定します。
※状況に応じて任意の値を指定してください。

・対象フォルダ(13行目)
・出力シート(15行目)
・出力列(17行目)
・出力行(19行目)

「FileSystemObject」の「GetFolder」メソッドにより、「Folderオブジェクト」を取得します(24行目)。

「Folderオブジェクト」の「Files」プロパティにより、「Filesコレクション」を取得します(24行目)。

「Filesコレクション(=Fileオブジェクト)」の数だけ繰り返し処理をします(24~29行目)。

「Fileオブジェクト」の「Name」プロパティにより、ファイル名を取得します(26行目)。

実行結果

VBAで
 ・指定したフォルダ配下の
 ・ファイル一覧を取得
できました。

実行結果
実行結果

参考①(Dir関数を使用【非推奨】)

上記のVBAコードは「FileSystemObject」や「Fileオブジェクト」を使用してファイル一覧を取得していますが、Dir関数を使用しても同様のことができます。

他のサイトにはDir関数を使用した方法がよく記載されています。

ただ私はDir関数は可読性が良くないと考えるため、Dir関数を使用した方法はオススメしません。
※Dir関数を知らない人は、「Dir(“フルパス”)」から「ファイル名を取得」していることを推測できません。

「Fileオブジェクト」の「Name」プロパティならば、「ファイルの名前を取得しているんだな」と推測できます。
※英単語(名前)から処理の挙動を推測できることが、「名前」の素晴らしい部分(メリット)です。
※よって一般的に「変数名や処理名は適切な名前にしましょう」と言われています。

「Fileオブジェクト」の「Name」プロパティ
「Fileオブジェクト」の「Name」プロパティ

参考②

上記のコードで使用した以下の詳細は、公式サイトをご確認ください。

●「FileSystemObject」の「GetFolder」メソッド


●「Folderオブジェクト」の「Files」プロパティ


●「Filesコレクション」


●「Fileオブジェクト」の「Name」プロパティ