Power QueryでCSVのデータソースを動的に変更する
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
記事要約
Power Queryでは、File.Contents("固定パス") のようにCSVファイルのパスを直接書くことができます。しかし、読み込むCSVを切り替えたい場合、固定パスのままだと毎回クエリを編集する必要があります。この記事では、シート上の1行1列テーブルにファイルパスを持たせ、その列値をPower Queryの中で参照してCSVを読み込む方法を整理します。
本記事の対象とゴール
対象は、Power Queryで複数のCSVを読み替えたい人です。特に、月別ファイル、取引先別ファイル、個人別ファイルなど、列構造は同じだがファイル名だけが変わるデータを扱う場面を想定します。
ゴールは、Power Queryの中で外部CSVのパスをセル値またはテーブル値から受け取り、更新だけで読み込み対象を切り替えられる構造を理解することです。
先に結論
Power Queryでファイルパスを動的に扱うには、パスを持つ小さなテーブルを作り、その列値をカスタム列で File.Contents に渡します。投稿素材では、次のような式が使われていました。
Csv.Document( File.Contents([パス]), [Delimiter=",", Columns=9, Encoding=932, QuoteStyle=QuoteStyle.None])ポイントは、固定文字列ではなく [パス] で同じ行の列値を参照していることです。これにより、パスを書いたテーブルの値を変えてクエリを更新すれば、読み込むCSVを切り替えられます。
<!-- LWP_REWRITE_EXPANSION_記事118 -->
1. データソースを固定しない
Power QueryでCSVを読むとき、ファイルパスをクエリ内へ直接書くと、別の環境で壊れます。実務では、月次ファイル、担当者別フォルダー、配布先PCの違いがあるため、データソースを動的に変えられる設計が必要です。
2. パラメーターとして持つ
ファイルパスやフォルダーは、クエリ本文に埋め込むのではなく、パラメーター、設定シート、名前定義などから渡す形にします。これにより、処理ロジックと環境差分を分けられます。
Power Query側では、その値を読み取り、File.Contents や Folder.Files に渡します。利用者が変えるべき場所を1か所に限定することが大切です。
3. 変更できる範囲を決める
動的にすると便利ですが、何でも変えられる状態は危険です。拡張子、列構成、文字コード、区切り文字が変わるなら、別の入力仕様として扱う必要があります。パスだけ変わるのか、ファイル仕様も変わるのかを分けて設計します。
手順1: パスを持つテーブルを作る
まず、Excelシート上に1行1列のテーブルを作ります。列名は パス としておくと分かりやすいです。セルには、展開したいCSVファイルのフルパスを入れます。
パスC:\data\kojin1.csvこのテーブルは、Power Queryから見ると「読み込み対象を決めるための設定表」です。CSVデータ本体ではありません。
手順2: 設定表からクエリを作る
次に、この1行1列のテーブルをPower Queryへ取り込みます。取り込んだ直後は、単に パス 列だけを持つテーブルです。
この段階では、まだCSVの中身は読んでいません。Power Query上には「どのファイルを読むか」という文字列が1行あるだけです。
手順3: カスタム列でCSVを読み込む
カスタム列を追加し、その式で Csv.Document(File.Contents([パス]), ...) を使います。
File.Contents([パス]) は、同じ行の パス 列に入っている文字列をファイルパスとして扱います。その結果を Csv.Document に渡すことで、CSVの中身がテーブル値として返ります。
ここがPower Queryらしいところです。SQLの感覚では「ファイルを読み込んでから結合する」と考えがちですが、Power Queryでは列の中にテーブル値を持たせ、それを展開する、という流れになります。
手順4: テーブル値を展開する
カスタム列には、CSVの中身がテーブルとして入ります。その列を展開すると、CSVの各列がPower Queryの列として広がります。
その後は通常どおり、1行目をヘッダーとして昇格し、不要列の削除や型変換を行います。
手順5: パスを変えて更新する
設定表の パス の値を kojin1.csv から kojin4.csv のように変更し、クエリを更新します。列構造が同じであれば、Power Queryの手順を作り直さずに、読み込むCSVだけを切り替えられます。
この方法は、ファイル一覧を増やせば複数ファイルの読み込みにも発展できます。1行1ファイルとしてパスを並べ、それぞれの行で Csv.Document(File.Contents([パス]), ...) を実行し、最後に展開する形です。
注意点
この方法は便利ですが、パスをセルに持たせるため、利用者が誤ったパスを書いた場合には更新時にエラーになります。また、組織内で共有するブックでは、他の利用者のPCでも同じパスが有効かを考える必要があります。
ローカルパスを直接持つより、共有フォルダー、相対パス、設定シート、名前定義などのどれを使うかを、利用者の環境に合わせて決めるべきです。特に、プライバシーレベルや外部データソースとの組み合わせは、次の記事で扱うように別の注意点があります。
まとめ
Power Queryでデータソースを動的に変更する基本は、ファイルパスをデータとして持たせることです。固定文字列の File.Contents("...") ではなく、列値の [パス] を渡せば、設定表の値を変えるだけで読み込み対象を切り替えられます。Power Queryの「列にテーブルを持たせて展開する」考え方に慣れると、複数ファイル処理や設定駆動の取り込みを作りやすくなります。
出典メモ- 元Togetter URL: https://togetter.com/li/1832949
正規Posfie URL: https://posfie.com/@hoehoe1234/p/r3DmgEm
取得日: 2026-06-12
投稿者: ほえほえ@マクロ師のひとりごとDX @hoehoe1234 ほか、会話参加者
素材として使った範囲: 投稿本文、投稿中の手順説明、リンク先として明示されている参考記事、取得できた画像の目視確認結果
画像確認: X投稿画像のうち、パス列にCSVパスが入り、CSV展開結果がテーブルとして広がっている画面を取得・目視確認した。本文では画像内で確認できたパス列と展開結果の関係を手順説明に反映した。
注意: 投稿本文は記事素材として要約・再構成し、長文転載ではなく、Power Query学習記事として補足説明を加えた。
