「特定フォルダのファイル名を全部Excelに書き出して!」
上司からこんな急な依頼をされたことはありませんか?
一つひとつ手作業でコピー&ペースト…なんて、想像するだけで気が遠くなりますよね。単純作業なのに時間がかかり、ミスの原因にもなりがちです。
そんな「もうこんな作業やりたくない!」という悩みを解決するのが、本記事で紹介するExcelマクロです。
この記事では面倒なファイルリスト作成作業をボタン一つで自動化する方法をご紹介します。
今回は、誰でもコピペで使える具体的なコードとその使い方を、専門用語できるだけ使わずに解説しますね。
基本から応用まで4つのコードを用意したので、あなたの目的にぴったりのものを見つけてほしいです。
【まずコピペ】基本のファイル一覧作成マクロ
結論からいきましょう。指定した1つのフォルダ内にある全てのファイル情報を一覧にする、最も基本的なマクロです。まずはこれをコピペして試してみてください。
コピペでOK!基本のコード
以下のコードをコピーして、あなたのExcelに貼り付けるだけで準備完了です。コードの各行が何をしているか、右側にコメントを入れたので、ぜひ参考にしてください。
Sub CreateFileList_Basic()
' --- 変数の宣言 ---
' これから使うデータを入れておく「箱」(変数)の名前と種類を決めておく
Dim FSO As Object ' ファイルやフォルダを操作するための道具
Dim Folder As Object ' 指定されたフォルダそのものを入れる道具
Dim File As Object ' フォルダの中の各ファイルを入れる道具
Dim FolderPath As String ' ユーザーが選んだフォルダの場所を覚えておくための変数
Dim i As Long ' Excelシートの行番号を数えるための変数
' --- フォルダ選択ダイアログの表示 ---
' Withブロックで、フォルダ選択画面の設定をまとめて行う
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "ファイルリストを作成するフォルダを選択してください" ' ダイアログのタイトルを設定
If .Show = True Then ' もしユーザーがフォルダを選んで「OK」を押したら
FolderPath = .SelectedItems(1) ' 選ばれたフォルダのパスを変数に入れる
Else ' もし「キャンセル」が押されたら
Exit Sub ' このマクロの処理をここで中断する
End If
End With
' --- ファイル操作の準備 ---
' FSOという道具を使えるように準備する
Set FSO = CreateObject("Scripting.FileSystemObject")
' ユーザーが選んだフォルダパスから、実際のフォルダ情報を取得
Set Folder = FSO.GetFolder(FolderPath)
' 書き出しを開始する行を2行目に設定(1行目は見出しのため)
i = 2
' --- Excelシートの準備 ---
ActiveSheet.Cells.ClearContents ' 現在のシートの内容をすべて消去して綺麗にする
ActiveSheet.Cells(1, 1).Value = "ファイル名" ' 1行目A列に見出しを設定
ActiveSheet.Cells(1, 2).Value = "フルパス" ' 1行目B列に見出しを設定
ActiveSheet.Cells(1, 3).Value = "更新日時" ' 1行目C列に見出しを設定
' --- ファイル情報を書き出すループ処理 ---
' For Each...Nextで、フォルダ内の全ファイルを一つずつ取り出して処理を繰り返す
For Each File In Folder.Files
' 取り出したファイルの情報を、指定したセルに書き込んでいく
ActiveSheet.Cells(i, 1).Value = File.Name ' i行目A列にファイル名
ActiveSheet.Cells(i, 2).Value = File.Path ' i行目B列にフルパス
ActiveSheet.Cells(i, 3).Value = File.DateLastModified ' i行目C列に更新日時
i = i + 1 ' 次のファイルのために、行番号を1つ増やす
Next File
' --- 後片付け ---
Set File = Nothing
Set Folder = Nothing
Set FSO = Nothing
' --- 完了メッセージ ---
MsgBox "ファイルリストの作成が完了しました。"
End Sub
【カスタマイズ編】ファイルサイズや種類など、もっと詳しい情報を取得!
ファイル名や更新日時だけでなく、「ファイルサイズ」や「ファイルの種類」「作成された日」も一緒にリスト化できたら、もっと便利だと思いませんか?
基本のコードを少し改造するだけで、これらの情報も簡単に取得できます。変更・追加した部分には ‘←追加 というコメントを入れています。
Sub CreateFileList_Detailed()
' --- 変数の宣言 ---
Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim FolderPath As String
Dim i As Long
' --- フォルダ選択 ---
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "ファイルリストを作成するフォルダを選択してください"
If .Show = True Then
FolderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
' --- 準備 ---
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(FolderPath)
i = 2
' --- シートの準備 ---
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells(1, 1).Value = "ファイル名"
ActiveSheet.Cells(1, 2).Value = "フルパス"
ActiveSheet.Cells(1, 3).Value = "更新日時"
ActiveSheet.Cells(1, 4).Value = "ファイルサイズ(Byte)" '←追加
ActiveSheet.Cells(1, 5).Value = "ファイルの種類" '←追加
ActiveSheet.Cells(1, 6).Value = "作成日時" '←追加
' --- ファイル情報を書き出すループ処理 ---
For Each File In Folder.Files
ActiveSheet.Cells(i, 1).Value = File.Name
ActiveSheet.Cells(i, 2).Value = File.Path
ActiveSheet.Cells(i, 3).Value = File.DateLastModified
ActiveSheet.Cells(i, 4).Value = File.Size '←追加
ActiveSheet.Cells(i, 5).Value = File.Type '←追加
ActiveSheet.Cells(i, 6).Value = File.DateCreated '←追加
i = i + 1
Next File
' --- 後片付け ---
Set File = Nothing
Set Folder = Nothing
Set FSO = Nothing
MsgBox "詳細なファイルリストの作成が完了しました。"
End Sub
カスタマイズのポイント
- File.Size: ファイルのサイズをバイト(Byte)単位で取得します。KBやMBに変換したい場合は、Excelの数式で=D2/1024のように計算すると簡単です。
- File.Type: Windowsエクスプローラーで表示される「種類」列の情報(例:「Microsoft Excel ワークシート」)を取得します。
- File.DateCreated: ファイルが作成された日時を取得します。
【応用編①】サブフォルダの中もすべて一覧に!
「フォルダの中にさらにフォルダが…」という階層構造でも大丈夫。
以下のコードを使えば、サブフォルダの中身もすべて探し出して一覧にします。
このコードの鍵は「再帰処理」というテクニックです(特に覚える必要はありません)。
これは、マトリョーシカ人形のように、処理の途中で自分自身を呼び出すことで、フォルダの階層をどこまでも深く探索していく仕組みです。
Sub CreateFileList_IncludeSubfolders()
' --- 変数の宣言 ---
Dim FSO As Object
Dim FolderPath As String
Dim StartFolder As Object
Dim i As Long ' 行番号カウンタ
' --- フォルダ選択 ---
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "ファイルリストを作成するフォルダを選択してください(サブフォルダも対象)"
If .Show = True Then
FolderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
' --- 準備 ---
Set FSO = CreateObject("Scripting.FileSystemObject")
Set StartFolder = FSO.GetFolder(FolderPath)
i = 2 ' 2行目から書き出し開始
' --- シートの初期化とヘッダー作成 ---
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells(1, 1).Value = "ファイル名"
ActiveSheet.Cells(1, 2).Value = "フルパス"
ActiveSheet.Cells(1, 3).Value = "更新日時"
ActiveSheet.Cells(1, 4).Value = "格納フォルダ" ' どのフォルダに入っているかを示す列を追加
' --- 再帰処理の呼び出し ---
' 指定したフォルダを起点に、ファイル検索を開始する
Call ListFilesRecursively(StartFolder, i)
' --- 後片付け ---
Set StartFolder = Nothing
Set FSO = Nothing
MsgBox "ファイルリストの作成が完了しました。(サブフォルダ含む)"
End Sub
' ■■■ 再帰的にファイルを探す ■■■
' Privateなので、このモジュール内でのみ呼び出せる補助的なプログラム
Private Sub ListFilesRecursively(ByVal TargetFolder As Object, ByRef RowIndex As Long)
Dim File As Object
Dim SubFolder As Object
' --- まず、現在のフォルダ内にあるファイルを書き出す ---
For Each File In TargetFolder.Files
ActiveSheet.Cells(RowIndex, 1).Value = File.Name
ActiveSheet.Cells(RowIndex, 2).Value = File.Path
ActiveSheet.Cells(RowIndex, 3).Value = File.DateLastModified
ActiveSheet.Cells(RowIndex, 4).Value = TargetFolder.Path ' 格納フォルダのパスを追加
RowIndex = RowIndex + 1 ' 行番号を1つ進める
Next File
' --- 次に、現在のフォルダ内にある全てのサブフォルダに対して同じ処理を繰り返す ---
For Each SubFolder In TargetFolder.SubFolders
Call ListFilesRecursively(SubFolder, RowIndex)
Next SubFolder
End Sub
【応用編②】PDFだけなど、特定のファイルだけを抽出!
「画像ファイル(.jpg)だけ」「請求書(.pdf)だけ」のように、特定のファイルだけをリストアップすることも可能です。
実行すると入力ボックスが表示され、抽出したい拡張子を指定できます。
Sub CreateFileList_FilterByExtension()
' --- 変数の宣言 ---
Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim FolderPath As String
Dim i As Long
Dim TargetExtension As String ' ユーザーが指定する拡張子を保存する変数
' --- フォルダ選択 ---
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "ファイルリストを作成するフォルダを選択してください"
If .Show = True Then
FolderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
' --- 拡張子の入力 ---
' InputBoxを表示し、ユーザーからのテキスト入力を受け取る
TargetExtension = InputBox("抽出したいファイルの拡張子を入力してください。(例: pdf, xlsx, jpg)", "拡張子の指定")
' もし何も入力されずにOKやキャンセルが押されたら処理を終了
If TargetExtension = "" Then Exit Sub
' --- 準備 ---
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(FolderPath)
i = 2
' --- シートの準備 ---
ActiveSheet.Cells.ClearContents
ActiveSheet.Cells(1, 1).Value = "ファイル名"
ActiveSheet.Cells(1, 2).Value = "フルパス"
ActiveSheet.Cells(1, 3).Value = "更新日時"
' --- ファイル情報を書き出すループ処理 ---
For Each File In Folder.Files
' --- 拡張子をチェックする条件分岐 ---
' ユーザーが「PDF」と大文字で入力しても「pdf」と小文字で入力しても正しくファイルを探せるように、両方を小文字に変換して比較します。
If LCase(FSO.GetExtensionName(File.Name)) = LCase(TargetExtension) Then
' もし拡張子が一致した場合のみ、以下の書き出し処理を行う
ActiveSheet.Cells(i, 1).Value = File.Name
ActiveSheet.Cells(i, 2).Value = File.Path
ActiveSheet.Cells(i, 3).Value = File.DateLastModified
i = i + 1 ' 行番号を増やす
End If
Next File
' --- 後片付け ---
Set File = Nothing
Set Folder = Nothing
Set FSO = Nothing
MsgBox "「." & TargetExtension & "」ファイルのリスト作成が完了しました。"
End Sub
【トラブル解決】もしマクロが動かなかったら?
「実行ボタンを押したのに、エラーが出て動かない…」
初めてマクロを使うとき、エラーはつきものです。でも大丈夫、原因は限られていることが多いです。
ここでは、よくあるエラーとその解決方法をご紹介しますね。
ケース1:エラーメッセージ「コンパイルエラー:ユーザー定義型は定義されていません。」
これは、マクロがファイル操作の道具(FileSystemObject)を知らないときに発生する、最も一般的なエラーです。
【解決策】ライブラリの参照設定を行う
- VBE(Alt + F11で開く画面)のメニューバーから「ツール」→「参照設定」をクリックします。
- 一覧の中から「Microsoft Scripting Runtime」を探し、左側のチェックボックスにチェックを入れます。
- 「OK」ボタンを押してウィンドウを閉じます。
これでもう一度マクロを実行してみてください。多くの場合、これで解決します。
ケース2:マクロを実行しても何も起こらない
「実行ボタンを押したのに、シーンとしている…」
これは、Excelが「知らない人からもらったプログラムは危ないかもしれない」と判断し、安全のためにマクロの動作を一旦止めている状態です。
【解決策】セキュリティ設定を確認し、コンテンツを有効化する
- ファイルを開き直した際に、リボンの下に「セキュリティの警告 マクロが無効にされました」という黄色いバーが表示されたら、「コンテンツの有効化」ボタンをクリックしてください。
- もし警告バー自体が表示されない場合は、「ファイル」→「オプション」→「トラストセンター」→「トラストセンターの設定」→「マクロの設定」と進み、「警告を表示してすべてのマクロを無効にする」にチェックが入っているか確認しましょう。
まとめ
今回は、Excelマクロを使ってファイルリストを自動作成する方法を4つのパターンでご紹介しました。
- 基本のリスト作成
- 詳細情報(ファイルサイズ等)を含むリスト作成
- サブフォルダを含むリスト作成
- 特定のファイル種類だけのリスト作成
「難しそう…」と感じていたプログラミングも、こうしてコピペから始めれば、決して遠い存在ではありません。
一つひとつの面倒な作業を自動化していくことで、あなたの業務時間は短縮され、心にも余裕が生まれます。
その空いた時間で新しいスキルを学んだり、大切な人と過ごしたり。たった一つのマクロが、あなたの働き方、そして人生を豊かにするきっかけになるかもしれません。
今回の記事が少しでも参考になったら嬉しいです!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、ぜひ参考にしてみてください。


コメント