今回はフォルダに保存されているファイル名を全て取得する方法を紹介したいと思います。
フォルダに保存されているファイル名を全て取得する方法
それでは早速コードを紹介します。
今回は「果物」フォルダ(C:\ExcelMacro\果物
)に保存されているファイルの名前を全て取得し、シートに書き出すマクロになります。
![フォルダに保存されているファイル名を全て取得する方法_保存ファイル一覧](https://masashi-blog418.com/wp-content/uploads/2023/10/image-4.png)
Sub outputFileName()
Dim FSO As FileSystemObject
Dim Fld As Folder
Dim File As File
Dim targetFldPath As String
Dim i As Long
Application.ScreenUpdating = False
targetFldPath = "C:\ExcelMacro\果物"
Set FSO = New FileSystemObject
Set Fld = FSO.GetFolder(targetFldPath)
i = 1
For Each File In Fld.Files
ThisWorkbook.Worksheets(1).Range("A1").Offset(i, 0) = File.Name
i = i + 1
Next
Set FSO = Nothing
Set Fld = Nothing
Set File = Nothing
Application.ScreenUpdating = True
End Sub
実行すると指定したフォルダに保存されているファイル名がシートに出力されます。
![フォルダに保存されているファイル名を全て取得する方法_実行後](https://masashi-blog418.com/wp-content/uploads/2023/10/image-5.png)
コードの解説
次にコードについて解説します。
ポイントになるのはファイル・フォルダ操作をする前の事前準備に当たるSet FSO ~ GetFolder(targetFldPath)
とフォルダ内のファイルを全て取得して操作するFor Each ~ Next
の部分です。
Set FSO = New FileSystemObject
Set Fld = FSO.GetFolder(targetFldPath)
i = 1
For Each File In Fld.Files
ThisWorkbook.Worksheets(1).Range("A1").Offset(i, 0) = File.Name
i = i + 1
Next
ファイル・フォルダ操作をする前の事前準備
初めに「ファイル・フォルダ操作をする前の事前準備」であるSet FSO ~ GetFolder(targetFldPath)
について説明しますが、マクロからファイル・フォルダ操作をするのが初めての方はそもそもSet FSO = New FileSystemObject
の部分がよく分からないと思うので、まずそちらから説明します。
Set FSO = New FileSystemObject
Set FSO = New FileSystemObject
についてざっくり言うと「ファイル・フォルダを操作できるようにする為のおまじない」みたいな感じです。
![](https://masashi-blog418.com/wp-content/uploads/2022/09/b0261.png)
操作って何のこと??
となると思いますが、具体的にはファイル・フォルダの移動・コピー・削除や名前・作成日・更新日の取得などのことで、特に移動・コピー・削除なんかは皆さんが普段行っていることかと思います。
そういった操作をマクロから実行する為にFileSystemObject
というオブジェクトが必要になり、オブジェクトを扱うために変数FSO
に新しくセットしている処理がSet FSO = New FileSystemObject
になる、というワケです。
'ファイル・フォルダ操作を行う前のおまじない
Set FSO = New FileSystemObject
少々長くなりましたが、「ファイル・フォルダを操作する時はとりあえずコレを書いておく」ということを覚えておけばOKです。
そしてSet Fld ~
はFileSystemObject
がセットされている変数FSO
を介して、指定されたフォルダを取得して変数Fld
に格納している処理になります。
'カッコ内に指定したフォルダを取得する
Set Fld = FSO.GetFolder(targetFldPath)
最後にSet FSO ~ GetFolder(targetFldPath)
の流れをまとめると以下のようになります。
- ファイル・フォルダ操作する為のオブジェクトを作成する
(Set FSO = New FileSystemObject
) - 作成したオブジェクトを使用して、フォルダを取得する
(Set Fld = FSO.GetFolder(targetFldPath)
)
フォルダ内のファイルを全て取得して操作する
次に「フォルダ内のファイルを全て取得して操作する」に当たるFor Each ~ Next
について説明します。
i = 1
For Each File In Fld.Files
ThisWorkbook.Worksheets(1).Range("A1").Offset(i, 0) = File.Name
i = i + 1
Next
処理は非常にシンプルなので上から順に説明していきます。
まずFor Each File In Fld.Files
を簡単に説明すると「取得したフォルダのファイル件数分だけ繰り返す」という意味になります。
'フォルダ内のファイル件数分だけ繰り返す
For Each File In Fld.Files
今回の例で言うと「果物」フォルダには
- イチゴ.xlsx
- バナナ.xlsx
- リンゴ.xlsx
の3つが格納されているので、繰り返し回数は「3回」になる、といった感じです。
![コードの解説_フォルダ内のファイルを全て取得して操作する_1](https://masashi-blog418.com/wp-content/uploads/2023/10/image-4.png)
そして繰り返し対象である「セルにファイル名を書き込む」処理が以下の部分になります。
ThisWorkbook.Worksheets(1).Range("A1").Offset(i, 0) = File.Name
流れを簡単に説明すると以下のようになります。
.Offset(i,0)
でA1セルから下方向に1ずつ移動- 移動先セルに
File.Name
を格納 - 添え字
i
に1を加算 Next
に到達したら次のファイルを処理する
まとめ
今回はフォルダに保存されているファイル名を全て取得する方法を紹介しました。
FileSystemObjectを使用したファイル・フォルダ操作は大変便利なので是非覚えておきましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント