Power Queryの「フォルダーから」を使うと、指定したフォルダ内に存在するすべてのファイルを読み込んで、ひとつのリストとして結合できます。一度こうしたクエリを作っておけば、基幹システムなどから新しいデータファイルを入手したとき、ただそのフォルダに保存するだけで結合が行われます。メチャクチャ便利な機能です。しかし、もし、指定したフォルダ内に"読み込みたくない"ファイルが存在したらどうでしょう。
このやり方、別のコンテンツ内にチラッと書いているのですが、先日のセミナーで質問されたので、あらためて本稿で詳しく解説します。まず、ここでは次のようなファイル群で考えてみます。
先に結論から書きます。特定のファイルだけを読み込むには、次のように考えます。
「フォルダーから」の機能で、特定のファイルだけを対象にすることはできません。この時点では、全ファイルがリストアップされます。そのリストをPower Queryエディタに取得して、Power Queryエディタ上でリストを絞り込みます。やってみましょう。
フォルダを指定します。
ここで[データの変換]ボタンをクリックします。
指定したフォルダ内の全ファイルリストが取得されますので、オートフィルタの要領で目的のファイルだけに絞り込みます。もし、画像データやテキストファイルなど、結合したくない種類のファイルが混在していたら、拡張子で絞り込むといいでしょう。また「フォルダーから」では、指定したフォルダにサブフォルダが存在する場合、それらすべてのサブフォルダも対象になります。特定のフォルダだけを対象にしたいときは、ファイルのパスで絞り込んでください。今回は「"東京"という文字列を含む」で絞り込んでみます。
これらのファイルを結合します。[Content]列のタイトルにある[ファイルの結合]ボタンをクリックします。
任意のファイルが取得され、[ファイルの結合]ダイアログボックスでプレビューが表示されますので、[OK]ボタンをクリックします。言い忘れましたが、今回扱うCSVファイルは、すべて同じ項目が同じ順番で並んでいます。また、結合結果が見て分かりやすいように、それぞれのデータ件数は少なくしてあります。
Excelに読み込むと、次のようになります。
せっかくですから、読み込む条件を変えられるようにしてみましょうか。これには「パラメータクエリ」という仕組みを作ります。パラメータクエリの詳細は、下のページをご覧ください。
適当な場所に、条件を入力する欄を作り、そこをテーブルにします。テーブルの名前は「Filter」としました。
このテーブル[Filter]をPower Queryエディタに取得します。
取得した[Filter]の値部分(今回は"大阪")を右クリックして[ドリルダウン]をクリックします。
最初に作成したクエリ[Data]を選択して[詳細エディター]をクリックします。
「フィルターされた行 = Table.SelectRows(ソース, each Text.Contains([Name], "東京")),」の「"東京"」部分を
「フィルターされた行 = Table.SelectRows(ソース, each Text.Contains([Name], Filter)),」と書き換えます。
[完了]ボタンをクリックすると、Power Queryエディタ上でも変更されます。[閉じて読み込む]の[閉じて次に読み込む...]クリックしてください。
条件を入力するテーブル[Filter]は、Excelに読み込む必要がありませんので[接続の作成のみ]を選択します。
「2023-07」などの日付でもファイルを特定できますが、ひとつ注意が必要です。セルG2に、普通に「2023-07」などと入力すると、勝手に日付へと変換されてしまいますので、先にセルG2の表示形式を"文字列"に指定してください。