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

2019年11月6日

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 指定フォルダ内のファイルを一括削除する方法

フォローする