このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2024年8月26日

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

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

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

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

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一択です。
この本を読み切れば間違いなくVBA上級者になれます。

created by Rinker
技術評論社
¥3,608 (2024/10/29 14:16:48時点 Amazon調べ-詳細)
VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい