直下のサブフォルダー名を一覧にする
FileSystemObjectのSubFoldersで直下のサブフォルダー名を新規シートへ一覧出力。子と孫・ファイルの違い、2件・0件・エラーの結果を具体例で確認します。
実行前に確認
- Windows専用の例です。C:\Dataは例なので、自分で用意した練習用フォルダーの絶対パスに変更してください。
- 隠し・システム属性の項目も含みます。子フォルダー内へは再帰的に入りません。並び順は保証されません。
- WindowsのFileSystemObjectを使います。参照設定は不要です。
- 実行するたびにコードを保存したブックへ新規シートを追加します。エラー時に作成途中のシートや一部の一覧が残る場合があります。コピーした練習用ブックで試してください。
- 公式仕様とコードを照合した説明例です。Excel実機での実行は未検証です。
1サンプルコード
Sub Example4019()
On Error GoTo Failed
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folderPath As String, folder As Object, item As Object
Dim ws As Worksheet, r As Long
folderPath = "C:\Data"
Set folder = fso.GetFolder(folderPath)
Set ws = ThisWorkbook.Worksheets.Add
ws.Columns("A").NumberFormat = "@"
ws.Range("A1").Value = "サブフォルダー名"
r = 2
For Each item In folder.SubFolders
If r > ws.Rows.Count Then Err.Raise 6, , "行数の上限です"
ws.Cells(r, 1).Value = item.Name
r = r + 1
Next item
MsgBox (r - 2) & "件を出力しました"
Exit Sub
Failed:
MsgBox "処理を中止しました: " & Err.Description
End Sub直下だけを調べると、何が一覧に入る?
次は自分で用意する練習用フォルダーと、コードから読み取れる出力例です。実際のExcel画面や実行結果ではありません。
C:\Data\ ← 調べる親(一覧には出さない)
├─ 売上\ ← 直下の子:対象
│ └─ 過去分\ ← 孫:対象外
├─ 請求\ ← 直下の子:対象
└─ メモ.txt ← ファイル:対象外folderPathをこの親フォルダーの絶対パスへ合わせます。この例では、コードを保存したブックに新しいシートを1枚追加し、A列へ名前だけを書き込みます。親や孫の名前、ファイル名、フルパスは出力しません。
| セル | A列に入る値 |
|---|---|
| A1 | サブフォルダー名 |
| A2 | 売上 |
| A3 | 請求 |
最後のメッセージは「2件を出力しました」です。表示順は一例で、売上と請求が逆の行になる場合もあります。コードは並べ替えをしていません。
0件とエラーは区別する
| 親フォルダーの状態 | 新規シート | メッセージ・注意 |
|---|---|---|
| 直下に子フォルダーが2個 | A1の見出しとA2以降に2件 | 2件を出力しました |
| 存在するが子フォルダーは0個 | A1の見出しだけ | 0件を出力しました。ファイルだけがある場合も同じ |
| 指定した親フォルダーが存在しない | 追加しない | GetFolderで失敗し「処理を中止しました: 」にエラーの説明を続けて表示 |
| シート追加後や一覧化の途中で失敗 | 作成途中のシートや一部の一覧が残る場合がある | 中止メッセージを表示。0件や一覧完成とは扱わない |
正常に再実行すると、別の新規シートがさらに1枚増えます。既存シートへの追記や自動削除は行いません。隠し・システム属性の子フォルダーも対象なので、件数の違いに気づいたら属性も確認してください。
図で見る操作の流れ
イメージ図コードの動きを表した概念図です。実際のExcel画面ではありません。
対象:C:\Data直下
直下のサブフォルダーだけを調べる
マクロ:新規シートを用意
A列を文字列書式にし、A1に「サブフォルダー名」
マクロ:名前を一覧化
各サブフォルダー名をA2から1行ずつ書く
結果:件数を表示
一覧の件数をメッセージに表示する
ファイルやフォルダー自体は変わりません。0件なら見出しだけで、孫フォルダーへは進みません。隠し・システム項目も含み、順番は保証されません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。
- 2
練習用の親フォルダーを用意し、その直下に「売上」「請求」、売上の中に「過去分」を作ります。親にメモ.txtがあっても一覧の対象にはなりません。folderPathを、この親フォルダーの絶対パスへ変更します。
- 3
実行するSubの内側にカーソルを置き、F5キーを押します。
- 4
コードを保存したブックへ新規シートを1枚追加して一覧を書きます。0件なら見出しだけです。