なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:親フォルダのパスを指定してファイルリストを作成する

Power Queryは、ファイル内のデータを読み込む以外にも色んな使い道がある。例えばフォルダコネクタも便利な機能のひとつだ。フォルダのパスを指定して、サブフォルダを含めたファイルのリストを作成したい場合に使える。

例えば、Cドライブ直下に「親フォルダ」があって、そこに「参照1」「参照2」フォルダがあるとする。

それぞれの参照用フォルダにはサンプルファイルと、画像ファイルが一つ入っているものとする。

クエリを使えば「親フォルダ」のパスを指定して、xlsxファイルだけのリストを読み込むことができる。

ではまず、マウス操作中心でやる場合。


Alt + F12で Power Queryエディタを開く [ホーム]→[新しいソース]→[フォルダ] 「親フォルダ」を選択して[開く]

→[データの変換]

これだけでフォルダ内のファイルリストがテーブルとして読み込まれる。後はここから必要な情報を分割したり抽出したりして読み込んでやればいい。

とりあえず「Extension」列で「.xlsx」ファイルだけを抽出してから、「フォルダ名」列を追加する。

[列の追加]→[カスタム列の追加]
列名:フォルダ名
式:= Text.Remove(Text.Replace([Folder Path], "C:\親フォルダ\", ""), "\")

この辺の数式の使い方は、ワークシート関数とあまり変わらない。

あとは列名を変更していらない列を削除すればおしまい。とても簡単。

M言語で記述すると下記の通り。

let
    親フォルダパス = "C:\……\……\", //ここは自分で指定
    ソース = Folder.Files(親フォルダパス),
    行の抽出1 = Table.SelectRows(
        ソース, each [Extension] = ".xlsx"
    ),
    フォルダ名列の追加 = Table.AddColumn(
        行の抽出1,
        "フォルダ名",
        each Text.Remove(Text.Replace([Folder Path], 親フォルダパス, ""), "\"),
        type text
    ),
    行の抽出2 = Table.SelectRows(
        フォルダ名列の追加, each [フォルダ名]<>""
    ),
    列名の変更 = Table.RenameColumns(行の抽出2, {
        {"Name", "ファイル名"}, {"Folder Path", "フォルダパス"}
    }),
    列の選択 = Table.SelectColumns(
        列名の変更, {"フォルダ名", "ファイル名", "フォルダパス"}
    )
in
    列の選択

いらないかもしれないけど、親フォルダ直下のファイルは除外してみた。