【Excelマクロ】フォルダ内の全ファイルを自動で処理する

ファイル名を手入力で書き出していませんか?

「このフォルダの中に、どんなファイルが入ってるか一覧にしたいな…」そんなとき、いちいちファイル名を見て、Excelに手入力していませんか?

もしくは色々と調べて、コマンドプロンプトを使う方法で難しいな、と思っていませんか?

さまざまな方法がありますが、VBAが使えるようになると、実は、たった10行ほどのVBAマクロでそれが自動化できます。

10行すらも書きたくない・・・!と言われると話が進まないのですが、1回作ってしまえば、繰り返し使えるので便利です。

実装するメリット(やることの意味)

  • ファイル一覧を一瞬で作成できる
  • 入力ミスを防げる
  • 手動チェックよりずっと効率的

実際にコードを書いてみましょう

  1. 指定したフォルダの中にあるファイルを順に取得
  2. ファイル名だけを取り出す
  3. Excelのシートに1件ずつ書き込んでいく
Sub ListFileNames()

    Dim folderPath As String
    Dim fileName As String
    Dim i As Long

    ' 対象フォルダのパス
    folderPath = "C:¥Test¥"

    ' パスの末尾に ¥ がなければ付け足す
    If Right(folderPath, 1) <> "¥" Then
        folderPath = folderPath & "¥"
    End If

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

    ' A列に1行ずつ出力していく
    i = 1
    Do While fileName <> ""
        Cells(i, 1).Value = fileName
        i = i + 1
        fileName = Dir() ' 次のファイル
    Loop

End Sub

解説

  • folderPath = "C:¥Test¥"
    どのフォルダを調べるかを指定します(ここに記載したフォルダ内のファイル一覧を出します)
  • If Right(folderPath, 1) <> "¥" Then ...
    最後が ¥ で終わっていない場合、自動で追加します。これがないと Dir がうまく動かないことがあります。
  • fileName = Dir(...)
    指定フォルダ内の最初のファイルを取得します。
  • Do While fileName <> ""
    ファイルが存在する間だけ繰り返し
  • Cells(i, 1).Value = fileName
    → ExcelのA列に1件ずつ書き込む処理です。

よくある質問

Q:フォルダにサブフォルダがある場合は?
→ このコードではサブフォルダ内は対象外です。サブフォルダも含めたい場合は、FileSystemObject を使った処理が必要です。

Q:ファイルの拡張子も表示されますか?
→ はい、フルのファイル名(例:data1.xlsx)として表示されます。

Q:ファイル名だけじゃなく、ファイルサイズや日付も知りたい
→ それも可能です。FileLenFileDateTime 関数を組み合わせることで実現できます。

応用アイデア

  • B列にファイルサイズを追加する
  • 条件(拡張子が .xlsx だけなど)で絞り込む
  • 一覧結果をCSVに保存する

これらを少しずつ加えていけば、業務に使える自動化ツールに変わっていきます。

まとめ

今回のコードは、VBAの基本である「ループ」「セルへの出力」「Dir関数」の組み合わせだけで、非常に実用的な処理が実現できる例です。

フォルダを変えるだけで、どんな場所のファイルでも一瞬で一覧化できます。

フォルダについては、今回は直接コードに記載しましたが、選択する方法については、別に記載します。

コメント