エクセルVBAで使うコードの備忘録。フォルダ内に存在するファイルのうち同じ拡張子のもののみを抽出してリスト化するコード。FileSystemObjectを利用して実現しています。
FileSystemObjectで拡張子を判定する
Windows上でファイルの情報にアクセスするには、FileSystemObjectを利用するのが便利です。FileSystemObjectを利用すると簡単に、
- 指定フォルダ内のファイル一覧を取得(GetFolder(“[フォルダパス]”).Files)
- 指定ファイルの名前を取得(GetFileName)
- 指定ファイルの拡張子を取得(GetExtensionName)
ができてしまうので、これらを組み合わせれば目的を達成することができます。
ファイルシステムオブジェクト(FileSystemObject)はウィンドウズのファイルやフォルダに関連する操作や情報を扱うためのオブジェクトで、を使用するには下記のようにまずオブジェクトを宣言し設定をします。
'--- ファイルシステムオブジェクトを設定 ---'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
同じ拡張子のファイルをリスト化する
下記のサンプルコードでは、FileSystemObjectを利用して、指定フォルダ内にある指定拡張子のファイルのリストを作成しています。拡張子の大文字・小文字を区別しないため、拡張子を判定する際にはLCaseメソッドを利用して取得した拡張子を全て小文字に変換しています。
同じ拡張子のファイルをリスト化する
Public Sub GetFileList()
'--- ファイルシステムオブジェクトを作成 ---'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'--- リストを取得したいフォルダのパス ---'
Dim folderPath As String
folderPath = "[フォルダのパス]"
'--- 抽出したい拡張子 ---'
Dim ext As String
ext = "[拡張子]"
'--- 指定拡張子のファイル数を数える変数 ---'
Dim count As Long
count = 0
'--- ファイルリストを格納する変数 ---'
Dim fileList() As String
'--- フォルダ内のすべてのファイルに対してループ ---'
Dim tmp As Object
For Each tmp In fso.GetFolder(folderPath).Files
'--- 拡張子が同じかどうか判定 ---'
If (LCase(fso.GetExtensionName(tmp)) = LCase(ext)) Then
'--- 配列を拡張して格納 ---'
count = count = 1
ReDim Preserve fileList(1 To count)
fileList(count) = fso.GetFileName(tmp)
End If
Next tmp
End Sub