【VBA】フォルダ内のファイル一覧をExcelに自動出力する方法(コピペOK)

この記事でできること

フォルダの中にあるファイル名を、1つずつ手作業でExcelに入力していませんか? VBAを使えば、コードをコピペして実行するだけで、指定フォルダ内の全ファイル名がExcelシートに一覧出力されます。この記事では、VBAが初めての方でも迷わずできるよう、最小限のコード(5行)から手順を解説します。

  • 対象:ファイル名を手入力している人、VBAが初めての人
  • 所要時間:コピペ → 実行まで約5分(目安)

完成イメージ(Before / After)

Before(実行前)

空のExcelシート。フォルダにはファイルが10個入っている。

After(実行後)

A
1 売上報告_202601.xlsx
2 売上報告_202602.xlsx
3 在庫リスト.xlsx
4 議事録_0115.docx
5 写真_001.jpg

A列にファイル名が1行ずつ並ぶ。


実行前の準備

バックアップを取る

既存のデータが入っているExcelファイルで実行する場合は、先にファイルをコピーしてバックアップを取ってください。コード内の Cells.Clear でシートのデータがすべてクリアされます。

Excelをマクロ有効ブック(.xlsm)で保存する

  1. Excelを開く(新規でも既存でもOK)
  2. 「ファイル」→「名前を付けて保存」
  3. ファイルの種類を 「Excel マクロ有効ブック (*.xlsm)」 に変更して保存

.xlsx のままだとマクロが保存されない。必ず .xlsm にすること。


手順(コピペ → 実行まで約5分)

VBE(コードを書く画面)を開く

Alt + F11 キーを押すとVBE(Visual Basic Editor)が開く。

一般的にはAlt + F11で開けるが、企業のセキュリティ設定でVBAが無効化されている場合は、IT部門に確認すること。

標準モジュールを挿入する

  1. VBEのメニュー「挿入」→「標準モジュール」をクリック
  2. 右側に白い画面(コードウィンドウ)が表示される

コードを貼り付けて実行する

  1. 下の「コード(最小版)」をコピーして、コードウィンドウに貼り付ける
  2. コード内の folderPath を自分の対象フォルダのパスに書き換える
  3. Alt + F8 を押す(または VBE上で F5
  4. 「GetFileList」を選択して「実行」
  5. Sheet1 を開き、A列にファイル名が並んでいることを確認する

フォルダパスの確認方法: エクスプローラーでフォルダを開き、アドレスバーをクリックするとパスが表示される。それをコピーして使う。

パスの末尾に \ を忘れないこと。 例:C:\Users\tanaka\Documents\報告書\


コード(最小版)— ファイル名だけ取得

まずはこれだけで動く。フォルダ内のファイル名をA列に書き出す。


Sub GetFileList()

    Dim folderPath As String
    Dim fileName As String
    Dim row As Long

    ' ★ ここを自分のフォルダパスに書き換える(末尾の \ を忘れずに)
    folderPath = "C:\Users\(ユーザー名)\Desktop\対象フォルダ\"

    ' 出力先シートをクリア(※既存データがあると消えるので注意)
    Worksheets("Sheet1").Cells.Clear

    ' 最初のファイル名を取得
    fileName = Dir(folderPath)

    row = 1

    ' ファイルがなくなるまで繰り返す
    Do While fileName <> ""
        Worksheets("Sheet1").Cells(row, 1).Value = fileName
        row = row + 1
        fileName = Dir()  ' 次のファイルを取得
    Loop

    MsgBox row - 1 & " 件のファイルを出力しました。", vbInformation

End Sub

シート名について: コード内の "Sheet1" はシート名(タブに表示される名前)。シート名を変更している場合は、自分のシート名に書き換えること。

パスの入力が面倒な場合(ダイアログで選択する方法):

folderPath = "..." の行を以下に置き換えると、実行時にフォルダ選択ダイアログが表示される。


    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            folderPath = .SelectedItems(1) & "\"
        Else
            Exit Sub
        End If
    End With

コード(実務版)— パス・更新日時・サイズも取得

業務で使うなら、ファイル名だけでなくフルパス・更新日時・サイズも欲しい場合が多い。以下はFileSystemObjectを使った実務版。


Sub GetFileListDetail()

    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim row As Long
    Dim ws As Worksheet

    ' ★ ここを自分のフォルダパスに書き換える
    Dim folderPath As String
    folderPath = "C:\Users\(ユーザー名)\Desktop\対象フォルダ\"

    ' FileSystemObject を作成(参照設定不要)
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' フォルダが存在するかチェック
    If Not fso.FolderExists(folderPath) Then
        MsgBox "フォルダが見つかりません:" & folderPath, vbExclamation
        Exit Sub
    End If

    Set folder = fso.GetFolder(folderPath)
    Set ws = Worksheets("Sheet1")

    ' 出力先シートをクリア(※既存データがあると消えるので注意)
    ws.Cells.Clear

    ' ヘッダー行
    ws.Cells(1, 1).Value = "ファイル名"
    ws.Cells(1, 2).Value = "フルパス"
    ws.Cells(1, 3).Value = "更新日時"
    ws.Cells(1, 4).Value = "サイズ(KB)"

    row = 2

    ' フォルダ内の各ファイルを処理
    For Each file In folder.Files
        ws.Cells(row, 1).Value = file.Name
        ws.Cells(row, 2).Value = file.Path
        ws.Cells(row, 3).Value = file.DateLastModified
        ws.Cells(row, 4).Value = Round(file.Size / 1024, 1)
        row = row + 1
    Next file

    MsgBox row - 2 & " 件のファイルを出力しました。", vbInformation

    Set file = Nothing
    Set folder = Nothing
    Set fso = Nothing

End Sub

CreateObject を使っているため、参照設定は不要。そのままコピペで動く。

シート名を変更している場合は Worksheets("Sheet1") を自分のシート名に書き換えること。


よくある落とし穴5選

# 症状 原因 対策
1 何も出力されない フォルダパスの末尾に \ がない パスの末尾に \ を必ず付ける。例:C:\Data\
2 「実行時エラー ’76’: パスが見つかりません」 フォルダパスが間違っている、またはフォルダが存在しない エクスプローラーのアドレスバーからパスをコピーして貼り付ける
3 マクロを保存したのに次回開くと消えている .xlsx で保存してしまった 「名前を付けて保存」→ ファイルの種類を .xlsm に変更する
4 既存のデータが消えた Cells.Clear が先頭にあるため、シートの全データがクリアされた 出力用に新しいシートを追加してから実行する。または Cells.Clear の行を削除する
5 日本語フォルダ名でエラーになる 一般的にはDir関数は日本語パスに対応しているが、特殊文字(# % など)がパスに含まれると問題になる場合がある フォルダ名に特殊文字を使わない。または短いパスに移動してから実行する

FAQ

Q1: サブフォルダ内のファイルも含めたい

Dir関数は1階層のみ対象。サブフォルダも含めるには FileSystemObject の再帰処理が必要になる。サブフォルダ対応を含むカスタマイズはココナラで相談できます。

Q2: .xlsx だけなど、特定の拡張子に絞りたい

最小版なら Dir(folderPath & "*.xlsx") と書き換える。実務版なら If fso.GetExtensionName(file.Name) = "xlsx" Then で条件分岐する。

Q3: ネットワークドライブ(\server\share)でも使える?

一般的にはUNCパス(\\サーバー名\共有名\)でも動作する。ただしアクセス権限がない場合はエラーになる。社内サーバーの場合はIT部門に確認すること。

Q4: 実行するたびに前回の結果が残ってしまう

コードの先頭に Cells.Clear が入っているため、通常は毎回クリアされる。もし残っている場合は、出力先シート名がコード内の指定と一致しているか確認する。

Q5: 100件以上のファイルがあっても大丈夫?

数千件程度なら問題ない。数万件を超える場合は Application.ScreenUpdating = False をコードの先頭に追加すると高速化できる。

Q6: サイズが「0」と表示されるファイルがある

0KBのファイルは空ファイル(中身がないファイル)。ファイル自体は存在するが、データが書き込まれていない状態。


まとめ

この記事で、指定フォルダ内のファイル名をExcelに自動一覧出力できるようになった。

  • 最小版:Dir関数でファイル名だけ取得。まずはこれで十分
  • 実務版:FileSystemObjectでパス・更新日時・サイズも取得

もっとカスタマイズしたい場合

「特定の拡張子だけ抽出したい」「サブフォルダも含めたい」「一覧をメールで自動送信したい」など、業務に合わせたカスタマイズが必要な場合は、ココナラで相談できます。

相談時に以下の情報があるとスムーズです:

  • Excel のバージョン / OS
  • 対象フォルダのパス構成(階層の深さ)
  • 出力したい項目(ファイル名以外に何が必要か)
  • ファイルの数(目安)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です