← コード一覧へ戻る
実務フォルダー

直下のサブフォルダー名を一覧にする

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列へ名前だけを書き込みます。親や孫の名前、ファイル名、フルパスは出力しません。

新規シートの出力例:直下の2フォルダー
セルA列に入る値
A1サブフォルダー名
A2売上
A3請求

最後のメッセージは「2件を出力しました」です。表示順は一例で、売上と請求が逆の行になる場合もあります。コードは並べ替えをしていません。

0件とエラーは区別する

同じコードでの状態別の結果
親フォルダーの状態新規シートメッセージ・注意
直下に子フォルダーが2個A1の見出しとA2以降に2件2件を出力しました
存在するが子フォルダーは0個A1の見出しだけ0件を出力しました。ファイルだけがある場合も同じ
指定した親フォルダーが存在しない追加しないGetFolderで失敗し「処理を中止しました: 」にエラーの説明を続けて表示
シート追加後や一覧化の途中で失敗作成途中のシートや一部の一覧が残る場合がある中止メッセージを表示。0件や一覧完成とは扱わない

正常に再実行すると、別の新規シートがさらに1枚増えます。既存シートへの追記や自動削除は行いません。隠し・システム属性の子フォルダーも対象なので、件数の違いに気づいたら属性も確認してください。

図で見る操作の流れ

イメージ図

コードの動きを表した概念図です。実際のExcel画面ではありません。

  1. 対象:C:\Data直下

    直下のサブフォルダーだけを調べる

  2. マクロ:新規シートを用意

    A列を文字列書式にし、A1に「サブフォルダー名」

  3. マクロ:名前を一覧化

    各サブフォルダー名をA2から1行ずつ書く

  4. 結果:件数を表示

    一覧の件数をメッセージに表示する

ファイルやフォルダー自体は変わりません。0件なら見出しだけで、孫フォルダーへは進みません。隠し・システム項目も含み、順番は保証されません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。

  2. 2

    練習用の親フォルダーを用意し、その直下に「売上」「請求」、売上の中に「過去分」を作ります。親にメモ.txtがあっても一覧の対象にはなりません。folderPathを、この親フォルダーの絶対パスへ変更します。

  3. 3

    実行するSubの内側にカーソルを置き、F5キーを押します。

  4. 4

    コードを保存したブックへ新規シートを1枚追加して一覧を書きます。0件なら見出しだけです。

使っている機能の公式ドキュメント(Microsoft Learn)