共有フォルダにある納品物や請求書PDFの一覧を、ファイル名を1つずつ書き写して作っていると、ファイルが追加・更新されるたびに作り直すことになります。Power Queryの「フォルダーから」を使えば、フォルダ内のファイル名・拡張子・更新日時・保存場所を表として取り込めます。一度作れば、あとは[更新]を押すだけで最新の一覧になります。
この記事では、ファイルの中身は結合せず、ファイルの情報だけを一覧にする手順を説明します。
手順1:フォルダを指定して[データの変換]を選ぶ
- Excelの[データ]タブ →[データの取得]→[ファイルから]→[フォルダーから]を選ぶ
- 一覧にしたいフォルダを選ぶ
- ファイルの一覧がプレビュー表示されたら、画面下のボタンから [データの変換] を選ぶ
プレビュー画面には[結合]ボタンもありますが、これはファイルの中身を1つの表にまとめる機能です。一覧を作るだけなら使いません。間違えて[結合]を選ぶと、「サンプル ファイル」や「ファイルの変換」といった補助のクエリが自動で作られます。その場合は、作られたクエリをいったん削除してやり直すほうが分かりやすいです。
メニューの名前や位置は、Excelのバージョンによって少し違うことがあります。見つからない場合は、[データの取得]の中で「フォルダー」を探してください。
手順2:取得される列を確認する
Power Queryエディターが開くと、次のような列が並びます。
| 列名 | 内容 | 一覧に残すか |
|---|---|---|
| Content | ファイルの中身(Binary) | 削除する |
| Name | ファイル名(拡張子付き) | 残す |
| Extension | 拡張子(例:.pdf) | 残す |
| Date accessed | 最終アクセス日時 | ふつうは不要 |
| Date modified | 最終更新日時 | 残す |
| Date created | 作成日時 | 必要なら残す |
| Attributes | サイズや隠しファイルかどうかなどの情報(Record) | 展開して必要な項目だけ残す |
| Folder Path | ファイルが入っているフォルダのパス | 残す |
「フォルダーから」で取得した一覧には、サブフォルダの中にあるファイルも含まれます。どのサブフォルダにあるかは、Folder Path 列で分かります。
手順3:不要な列を削除し、Attributes 列を展開する
- Content 列を選び、右クリック →[削除]
- Attributes 列の見出しにある展開ボタン(左右向きの矢印)をクリックし、Size と Hidden にチェックを入れて[OK]を押す
- 「元の列名をプレフィックスとして使用します」をオフにすると、列名が短くなります
- 表示される項目の名前は、展開ボタンを押したときの一覧で確かめてください
- Date accessed など、使わない列を削除する
Content 列を早めに消しておくと、エディターでの操作が軽くなります。
手順4:一覧に入れたくないファイルを除く
フォルダには、一覧に入れたくないファイルが混ざっていることがあります。
- 隠しファイル:Hidden 列のフィルターで TRUE を外す(
Thumbs.dbなどが当てはまることがあります) - Officeの一時ファイル:ファイルを開いている間にできる、名前が
~$で始まるファイル。Name 列のフィルター →[テキスト フィルター]→[指定の値で始まらない]を選び、~$を指定する - 特定の拡張子だけを一覧にしたい場合:Extension 列でフィルターする。ただし、
.PDFと.pdfのように大文字と小文字が混ざっていると、別の値として扱われます。先に Extension 列を選んで[変換]→[書式]→[小文字]でそろえてから絞ります
手順5:サブフォルダ名の列を作る
Folder Path 列にはドライブ名から始まる長いパスが入るので、そのままでは一覧が読みにくくなります。基準のフォルダより下の部分だけを取り出した列を作ると、どのサブフォルダにあるかがすぐ分かります。
[列の追加]→[カスタム列]で、次のように入力します(基準フォルダが C:\業務\納品物\ の場合)。
Text.Replace([Folder Path], "C:\業務\納品物\", "")
基準フォルダの直下にあるファイルは空欄になり、2026-10 フォルダの中のファイルは 2026-10\ と表示されます。直下のファイルだけを一覧にしたい場合は、この列が空欄の行だけに絞ります。
手順6:列名と並び順を整えて読み込む
- 列名を「ファイル名」「拡張子」「更新日時」「サイズ(バイト)」「サブフォルダ」「フォルダパス」などに変える
- Date modified 列の見出しのアイコンを見て、データ型が日付/時刻になっているか確かめる
- 更新日時の新しい順に並べ替える
- [ホーム]→[閉じて読み込む]で、シートにテーブルとして読み込む
ここまでの操作を詳細エディターで見ると、おおよそ次のようなM言語になります。列の型などの細かい部分は、操作の手順によって変わります。
let
RootPath = "C:\業務\納品物\",
Source = Folder.Files(RootPath),
RemovedContent = Table.RemoveColumns(Source, {"Content", "Date accessed"}),
ExpandedAttributes = Table.ExpandRecordColumn(RemovedContent, "Attributes", {"Size", "Hidden"}),
VisibleFiles = Table.SelectRows(ExpandedAttributes, each [Hidden] <> true and not Text.StartsWith([Name], "~$")),
LowerExtension = Table.TransformColumns(VisibleFiles, {{"Extension", Text.Lower, type text}}),
AddedSubfolder = Table.AddColumn(LowerExtension, "サブフォルダ", each Text.Replace([Folder Path], RootPath, ""), type text),
SelectedColumns = Table.SelectColumns(AddedSubfolder, {"Name", "Extension", "Date modified", "Size", "サブフォルダ", "Folder Path"}),
Renamed = Table.RenameColumns(SelectedColumns, {{"Name", "ファイル名"}, {"Extension", "拡張子"}, {"Date modified", "更新日時"}, {"Size", "サイズ(バイト)"}, {"Folder Path", "フォルダパス"}}),
Sorted = Table.Sort(Renamed, {{"更新日時", Order.Descending}})
in
Sorted
基準フォルダのパスを RootPath の1か所にまとめておくと、対象のフォルダを変えるときに書き換えるのが1か所で済みます。
手順7:更新で最新の一覧にする
ファイルを追加・削除・更新したら、[データ]→[すべて更新]を押すか、読み込んだテーブルの中で右クリック →[更新]を選びます。フォルダのその時点の状態で、一覧が作り直されます。
更新したら、次の点を確かめます。
- 件数:テーブルの行数が、エクスプローラーで見たファイル数とおおむね合っているか(隠しファイルや除外したファイルの分は差が出ます)
- 更新日時:最近保存したファイルが上のほうに来ているか
- 新しいサブフォルダ:追加したフォルダの中のファイルも一覧に入っているか
ブックを開いたときに自動で更新したい場合は、[データ]→[クエリと接続]でクエリを右クリックし、[プロパティ]を開きます。そこで、ファイルを開くときにデータを更新する設定を選べます。
一覧を使うときの注意
一覧の横に手入力の列を足さない
読み込んだテーブルの右に、「確認済み」「担当者」などの列を足して手入力すると、更新でファイルが増えたり減ったりしたときに、入力した内容が別のファイルの行にずれることがあります。チェックやメモを残したい場合は、別のシートに「ファイル名」と「メモ」の表を作ります。そのうえで、ファイル名をキーにして一覧から参照します(XLOOKUPやPower Queryのマージを使います)。
ファイルを開くリンクを付けたいとき
Power Queryで読み込んだ文字列は、そのままではクリックで開けるリンクになりません。テーブルの右隣に次のような数式の列を追加すると、クリックでファイルを開けるようになります。列名は自分の一覧に合わせてください。
=HYPERLINK([@フォルダパス]&[@ファイル名], "開く")
この列は同じ行の値から計算されるので、手入力の列とは違って、通常は更新後も行とずれません。最初の更新のあとで、正しいファイルが開くかを一度確かめておくと安心です。
別のパソコンや別の場所では更新できないことがある
C:\ から始まるパスは、そのパソコンでしか使えません。共有フォルダを対象にするなら、使う人全員がアクセスできるパスを指定します。たとえば、ドライブ文字の割り当てに左右されにくいネットワークパス(\\サーバー名\共有名\...)を使います。OneDriveやSharePoint上のフォルダは、同期の状態やパスの違いで結果が変わることがあります。実際に使う環境で更新できるかを確かめてください。
ファイル数が多いフォルダは時間がかかる
サブフォルダの階層が深くファイル数も多いと、更新に時間がかかることがあります。一覧に必要な範囲のフォルダだけを指定し、上の階層のフォルダ全体を対象にしないようにします。
直下のファイルとフォルダだけを見たいとき
Folder.Files は、サブフォルダの中まで探します。直下にあるファイルとサブフォルダの名前だけを一覧にしたい場合は、M言語の Folder.Contents を使う方法もあります。Folder.Contents はサブフォルダの中までは展開せず、フォルダそのものも1行として表示します。
