【VBA】FSOでファイル名一覧とサブフォルダ名一覧を取得する方法

FSO(FileSystemObject)を使ってファイル一覧とサブフォルダ一覧を取得する方法を紹介します。

具体的なことは後述しますが、FilesメソッドとSubFoldersメソッドを使ってファイルとサブフォルダを1つずつ取得していきます。

はじめに:ライブラリの参照設定

FSOでは「Microsoft Scripting Runtime」の参照設定が必要になります。

VBEの「ツール」⇒「参照設定」から設定ができます。

FSOでファイル一覧とサブフォルダ一覧を表示するプログラム

Sub getFilesSubFoldersName()
'Cドライブ直下のファイル名/サブフォルダ名を表示

    Dim fso As FileSystemObject: Set fso = New FileSystemObject 'ファイルシステムオブジェクトの生成
    Dim objFolder As Folder: Set objFolder = fso.GetFolder("C:\") 'フォルダオブジェクトを取得
    
    'ファイル名の表示
    Dim objFile As File
    For Each objFile In objFolder.Files 'Filesメソッド:ファイルコレクションを取得
        Debug.Print (objFile.Name)
    Next
    
    'サブフォルダ名の表示
    Dim objSubFolder As Folder
    For Each objSubFolder In objFolder.SubFolders 'SubFoldersメソッド:サブフォルダコレクションを取得
        Debug.Print (objSubFolder.Name)
    Next
    
    Set fso = Nothing
End Sub

このプログラムでは、Cドライブ直下のファイル名とサブフォルダ名をすべてDebug.Printします。(イミディエイトウィンドウにファイル名とサブフォルダ名を表示します)

大きく分けると次の3つのことを行っています。

  1. フォルダオブジェクトの取得
  2. ファイルコレクションの取得
  3. サブフォルダコレクションの取得

この後、それぞれどのようなプログラムを書いているか内容を紹介していきます。

GetFolderメソッドでフォルダオブジェクトを取得

    Dim fso As FileSystemObject: Set fso = New FileSystemObject 'ファイルシステムオブジェクトの生成
    Dim objFolder As Folder: Set objFolder = fso.GetFolder("C:\") 'フォルダオブジェクトを取得

まずFSOのオブジェクトを作成し、その後GetFolderメソッドを用いてCドライブフォルダをフォルダオブジェクトとして取得しています。

fso.GetFolder(フォルダパス)と記述するとパスが示すフォルダをフォルダオブジェクトとして取得することができます。

Filesメソッドでファイルコレクションを取得

 'ファイル名の表示
    Dim objFile As File
    For Each objFile In objFolder.Files 'Filesメソッド:ファイルコレクションを取得
        Debug.Print (objFile.Name)
    Next

ここではFilesメソッドを使用してファイルコレクションを取得しています。
フォルダオブジェクト.Filesと記述するとフォルダ内のファイルをコレクションとして取得できます。

このコレクションからFor Each文を使用してファイルオブジェクトを1つずつ取りだし、取り出したファイルの名前をそれぞれDebug.Printしています。

SubFoldersメソッドでサブフォルダコレクションを取得

    'サブフォルダ名の表示
    Dim objSubFolder As Folder
    For Each objSubFolder In objFolder.SubFolders 'SubFoldersメソッド:サブフォルダコレクションを取得
        Debug.Print (objSubFolder.Name)
    Next

ここでは SubFolders メソッドを使用してサブフォルダコレクションを取得しています。
フォルダオブジェクト.SubFoldersと記述するとフォルダ内のサブフォルダをコレクションとして取得できます。

このコレクションからFor Each文を使用してフォルダオブジェクトを1つずつ取りだし、取り出したフォルダの名前をそれぞれDebug.Printしています。

このようにFSOを使えば、ファイル/フォルダ名などの情報を簡単に取得することができます。フォルダ内の操作をしたい時には、FSOを使ってみてください。

《VBA初心者におすすめの本》
VBA初心者には、株式会社すごい改善さんの本が分かりやすくておすすめです。

created by Rinker
技術評論社
¥2,178 (2021/12/01 14:22:42時点 Amazon調べ-詳細)

動画で学びたい人には、すごい改善さんのUdemy講座をおすすめします。
【累計36万部著者が教える】たった1日で!まったくの初心者でも最短でExcel VBAを仕事で活用できるようになる講座

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい