Excel

【Excel】VBAマクロでフォルダ内のファイル名を取得(サブフォルダ内も:一覧に:すべて取得しセルに追記・入力)する方法【Dir関数、FileSystemObject】

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

この記事ではVBAマクロでフォルダ内のファイル名を取得(サブフォルダも含め場合も)し、シート内のセルに順番に追記する方法について解説していきます。

ポイントとしてはDir関数、FileSystemObjectを使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAマクロで指定フォルダ内の.xlsxファイル名をすべて取得し、シート1のB2セルから順番に追記していく方法

それではまず、VBAマクロで指定フォルダ内の.xlsxファイル名をすべて取得し、シート1のB2セルから順番に追記していく方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub Get_File_Names()
    'フォルダパスを指定
    Dim folderPath As String
    folderPath = "C:\Sample"
    
    'ファイル名を保存する変数
    Dim fileName As String
    
    '行番号カウンター
    Dim rowCounter As Long
    rowCounter = 2
    
    'Dir関数でフォルダ内のファイル名を1つずつ取得
    fileName = Dir(folderPath & "\*.xlsx")
    
    'ファイル名が取得できる間繰り返し
    Do While fileName <> ""
        'シート1のB列、rowCounter行目にファイル名を入力
        Sheets(1).Range("B" & rowCounter).Value = fileName
        
        '次の行へ
        rowCounter = rowCounter + 1
        
        '次のファイル名を取得
        fileName = Dir()
    Loop
End Sub

コードのAlt+F8を押し、マクロ選択画面でGet_File_Names関数を実行します。

 

コードの意味詳細

このコードでは、以下のステップでファイル名を取得し、シートに追記しています。

1. folderPathにファイル名を取得したいフォルダのパスを指定します。
2. fileNameにDir関数で取得したファイル名を格納します。
3. rowCounterで追記する行番号を管理します。初期値は2で、B2セルから開始します。
4. Dir関数にフォルダパスと”\*.xlsx”を指定し、.xlsxファイルのみを取得します。
5. 取得したファイル名を、シート1のB列、rowCounter行目に入力します。
6. rowCounterをインクリメントし、次の行に移動します。
7. Dir関数で次のファイル名を取得します。ファイル名が取得できなくなるまで5~7を繰り返します。

 

VBAマクロで指定フォルダ内とそのサブフォルダも含む中で.xlsxファイル名をすべて取得し、シート1のB2セルから順番に追記していく方法

続いては、VBAマクロで指定フォルダ内とそのサブフォルダも含む中で.xlsxファイル名をすべて取得し、シート1のB2セルから順番に追記していく方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub Get_File_Names_Recursive()
    'フォルダパスを指定
    Dim folderPath As String
    folderPath = "C:\Sample"
    
    '行番号カウンター
    Dim rowCounter As Long
    rowCounter = 2
    
    'FileSystemObjectを生成
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'フォルダを取得
    Dim targetFolder As Object
    Set targetFolder = fso.GetFolder(folderPath)
    
    '再帰的にファイル名を取得する関数を呼び出し
    ListFiles targetFolder, rowCounter
End Sub

Sub ListFiles(ByRef currentFolder As Object, ByRef rowCounter As Long)
    'フォルダ内のファイルを1つずつ取得
    Dim fileItem As Object
    For Each fileItem In currentFolder.Files
        'ファイルの拡張子が.xlsxの場合のみ処理
        If LCase(Right(fileItem.Name, 5)) = ".xlsx" Then
            'シート1のB列、rowCounter行目にファイル名を入力
            Sheets(1).Range("B" & rowCounter).Value = fileItem.Name
            
            '次の行へ
            rowCounter = rowCounter + 1
        End If
    Next
    
    'サブフォルダを1つずつ取得
    Dim subFolderItem As Object
    For Each subFolderItem In currentFolder.SubFolders
        '再帰的に関数を呼び出し
        ListFiles subFolderItem, rowCounter
    Next
End Sub

コードのAlt+F8を押し、マクロ選択画面でGet_File_Names_Recursive関数を実行します。

 

コードの意味詳細

このコードでは、FileSystemObjectを使用して指定フォルダとそのサブフォルダ内の.xlsxファイル名を再帰的に取得し、シートに追記しています。以下のステップで処理を行います。

1. folderPathにファイル名を取得したいフォルダのパスを指定します。
2. rowCounterで追記する行番号を管理します。初期値は2で、B2セルから開始します。
3. FileSystemObjectを生成し、GetFolderメソッドで指定フォルダを取得します。
4. ListFiles関数を呼び出し、取得したフォルダとrowCounterを渡します。
5. ListFiles関数内で、渡されたフォルダ内のファイルを1つずつ取得します。
6. ファイルの拡張子が.xlsxの場合のみ、シート1のB列、rowCounter行目にファイル名を入力します。
7. rowCounterをインクリメントし、次の行に移動します。
8. 渡されたフォルダ内のサブフォルダを1つずつ取得し、再帰的にListFiles関数を呼び出します。

 

まとめ VBAマクロでフォルダ内のファイル名をすべて取得しセルに入力・出力する方法【Dir関数、FileSystemObject】

この記事では、VBAマクロでフォルダ内のファイル名を取得(サブフォルダ内も:一覧に:すべて取得しセルに追記・入力)する方法【Dir関数、FileSystemObject】について解説しました。

マクロの扱いになれ、さらに快適な生活を送っていきましょう!