【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つのことを行っています。
- フォルダオブジェクトの取得
- ファイルコレクションの取得
- サブフォルダコレクションの取得
この後、それぞれどのようなプログラムを書いているか内容を紹介していきます。
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を使ってみてください。