【Excel VBA】フォルダに保存されているファイル名を全て取得する方法

Excel
スポンサーリンク

今回はフォルダに保存されているファイル名を全て取得する方法を紹介したいと思います。

スポンサーリンク

フォルダに保存されているファイル名を全て取得する方法

それでは早速コードを紹介します。
今回は「果物」フォルダ(C:\ExcelMacro\果物)に保存されているファイルの名前を全て取得し、シートに書き出すマクロになります。

フォルダに保存されているファイル名を全て取得する方法_保存ファイル一覧
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

実行すると指定したフォルダに保存されているファイル名がシートに出力されます。

フォルダに保存されているファイル名を全て取得する方法_実行後
スポンサーリンク

コードの解説

次にコードについて解説します。

ポイントになるのはファイル・フォルダ操作をする前の事前準備に当たる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についてざっくり言うと「ファイル・フォルダを操作できるようにする為のおまじない」みたいな感じです。

操作って何のこと??

となると思いますが、具体的にはファイル・フォルダの移動・コピー・削除や名前・作成日・更新日の取得などのことで、特に移動・コピー・削除なんかは皆さんが普段行っていることかと思います。

そういった操作をマクロから実行する為に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)の流れをまとめると以下のようになります。

  1. ファイル・フォルダ操作する為のオブジェクトを作成する
    Set FSO = New FileSystemObject
  2. 作成したオブジェクトを使用して、フォルダを取得する
    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

そして繰り返し対象である「セルにファイル名を書き込む」処理が以下の部分になります。

ThisWorkbook.Worksheets(1).Range("A1").Offset(i, 0) = File.Name

流れを簡単に説明すると以下のようになります。

  1. .Offset(i,0)でA1セルから下方向に1ずつ移動
  2. 移動先セルにFile.Nameを格納
  3. 添え字iに1を加算
  4. Nextに到達したら次のファイルを処理する
スポンサーリンク

まとめ

今回はフォルダに保存されているファイル名を全て取得する方法を紹介しました。

FileSystemObjectを使用したファイル・フォルダ操作は大変便利なので是非覚えておきましょう!

このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

コメント

タイトルとURLをコピーしました