Excelマクロ・VBA 指定フォルダのファイル一覧を取得する方法

2020年5月5日

Excel特有の用事ではありませんが、

特定のフォルダ内のファイル名を列挙したい場合があります。

そのような時に便利なブックとマクロ・VBAを紹介します。

サンプルファイル

使用方法

「実行」シートに「取得」ボタンを押下すると選択ダイアログが表示されるので

ファイル一覧を表示したいフォルダを選択します。

「実行」シートに「取得」ボタンのあるフォルダ

選択ダイアログで「OK」ボタンを押下すると「結果」シートに選択したフォルダと

ファイルの一覧、ファイル数が表示されます。(Excel以外のファイルも含まれます)

そこまで行くことはないと思われますが、ファイル数は1万件までです。

「結果」シートにファイルの一覧が表示された状態のキャプチャ

コードサンプルと説明

ファイル一覧の取得だけなら先述の手順だけでよいですが

カスタマイズしたい方やマクロの中身を知りたい方向けに

ソースコード説明は下記のとおりです。

Option Explicit

Sub DirSet()
    Dim exeSheet As Worksheet
    Set exeSheet = Worksheets("実行")
    
    Dim resultSheet As Worksheet
    Set resultSheet = Worksheets("結果")

    '初期化:既入力値を削除
    resultSheet.Range("A2").ClearContents
    resultSheet.Range("A4:A10004").ClearContents
 
    Dim dirPath As String '検索対象フォルダを格納する変数
    
    'フォルダ選択ダイアログを開く
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = 0 Then
            'キャンセルされたので終了
            Exit Sub
        Else
            ' 指定されたのでフォルダパスを取得
            dirPath = .SelectedItems(1) & "\"
            resultSheet.Range("A2").Value = dirPath ' フォルダパスを実行シートに記載
        End If
        
    End With
    
    Dim i As Integer
    i = 4 ' ファイル表示のループカウンタ(4行から開始)
    
    Dim fileName As String
    fileName = dir(dirPath & "*.*") ' 1ファイル目を取得
    
    ' 全ファイル名を繰り返す
    Do While fileName <> ""
        resultSheet.Cells(i, 1).Value = fileName ' ファイル名を実行シートに記載
        fileName = dir() ' 次のファイル名を取得(無ければ空白)
        i = i + 1
       '1万件を超えた場合、終了     
       If i > 10004 Then
         Exit Do     
       End If
    Loop
    
    ' 実行シートに移動
    resultSheet.Activate
    resultSheet.Cells(1, 1).Activate
End Sub

関連記事

マクロ・VBAの学習・活用方法の記事一覧

マクロ・VBA 指定フォルダ内のファイルを一括削除する方法