【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上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/05/20 10:38:41時点 Amazon調べ-詳細)

自分で作るのが難しいと感じたら、プロに作ってもらう手もあります。
こちらの記事でおすすめのプログラマーを紹介しています

《IT未経験-特化型サービス》



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

VBA

Posted by やろまい