Power Queryでセルの値を使って動的にデータを抽出する方法
🧭 1. はじめに
Excel の Power Query は、データの整形や変換を効率的に行える強力なツールです。特に、ユーザーが入力した条件に応じて動的にデータを抽出する機能は、レポートやダッシュボードの自動化に非常に役立ちます。
本記事では、別セルに入力された値を元に、Power Query でデータをフィルタする方法を、サンプルデータと共にわかりやすく解説します。
💡 2. シナリオ例
たとえば、以下のような売上データがあるとします:
- 担当者ごとの売上を管理している
- ユーザーがセルに担当者名を入力すると、その担当者の売上データだけを抽出したい
このようなケースで、Power Query を使えば、関数やマクロを使わずに動的な抽出が可能です。
🛠️ 3. 手順
📋 3.1 データの準備
まずは、以下のような売上データを Excel に用意します。テーブル名は SalesData とします。
🔹 サンプルデータ
| Date | Salesperson | Region | Product | SalesAmount |
|---|---|---|---|---|
| 2023-01-01 | Alice | North | Product A | 1000 |
| 2023-01-02 | Bob | South | Product B | 1500 |
| 2023-01-03 | Charlie | East | Product C | 2000 |
| 2023-01-04 | David | West | Product D | 2500 |
| 2023-01-05 | Eva | North | Product E | 3000 |
| 2023-01-06 | Frank | South | Product F | 3500 |
| 2023-01-07 | Grace | East | Product G | 4000 |
| 2023-01-08 | Hannah | West | Product H | 4500 |
| 2023-01-09 | Ian | North | Product I | 5000 |
| 2023-01-10 | Jack | South | Product J | 5500 |
🧾 3.2 抽出条件セルの準備
抽出条件 (担当者名) を入力するセルは、Power Query で扱いやすいように 1 行 1 列のテーブルとして設定します。
✅ 担当者名フィルター用テーブル(FilterSalesperson)
| Salesperson |
|---|
| Alice |
このように列名を明示しておくことで、Power Query 側での参照がわかりやすくなります。
🔄 3.3 Power Query でテーブルを読み込む
Power Query で複数のテーブルを使うには、それぞれのテーブルを個別に読み込み、クエリとして保存しておく必要があります。
✅ 手順:
- Excel の [データ] タブ → [テーブルまたは範囲から] から、売上データのテーブル(例:
SalesData)を Power Query に読み込みます。 - Power Query エディタで内容を確認し、[ホーム] タブ → [閉じて読み込む] をクリックしてクエリを保存します。
- 次に、抽出条件を入力したテーブル(例:
FilterSalespersonやFilterDateRange)についても、同様に [データ] タブ → [テーブルまたは範囲から] で読み込みます。 - Power Query エディタが開いたら、[ホーム] タブ → [閉じて次に読み込む] をクリックします。
- 表示される [データのインポート] ダイアログで、[接続の作成のみ] を選択し、[OK] をクリックしてクエリを保存します。
- すべてのテーブルが読み込まれた状態で、[データ] タブ → [データの取得] で [Power Query エディタの起動] でエディタを開き、必要な処理を行います。
🧮 3.4 M 言語でのフィルタ処理 (担当者名)
Power Query で読み込んだ SalesData クエリに対して、FilterSalesperson の値を使ってフィルタ処理を行います。
✅ 手順:
- [データ] タブ → [データの取得] → [クエリの編集] をクリックして、Power Query エディタを開きます。
- 左側のクエリ一覧から
SalesDataを選択します。 - [ホーム] タブ → [詳細エディター] をクリックします。
- 表示された M 言語のコードをそれぞれ以下のように編集します。
let
Source = Excel.CurrentWorkbook(){[Name="FilterSalesperson"]}[Content]{0}
in
Source
let
Source = Excel.CurrentWorkbook(){[Name="SalesData"]}[Content],
FilteredRows = Table.SelectRows(Source, each [Salesperson] = @FilterSalesperson[Salesperson])
in
FilteredRows
🚀 4. 応用:複数条件でのフィルタ (日付範囲)
日付の範囲でフィルタを行いたい場合は、開始日と終了日を1つのテーブルにまとめて管理することができます。
✅ 日付範囲フィルター用テーブル(FilterDateRange)
| FilterStartDate | FilterEndDate |
|---|---|
| 2023-01-01 | 2023-01-10 |
🧮 M 言語でのフィルタ処理 (複数条件)
let
Source = Excel.CurrentWorkbook(){[Name="FilterDateRange"]}[Content]{0}
in
Source
let
Source = Excel.CurrentWorkbook(){[Name="SalesData"]}[Content],
FilteredRows = Table.SelectRows(Source, each
[Date] >= @FilterDateRange[FilterStartDate]
and [Date] <= @FilterDateRange[FilterEndDate]
)
in
FilteredRows
⚠️ 5. 注意点とベストプラクティス
- テーブルは列名を明示し、1 行のみにしてください。
- データ型 (文字列、日付など) が一致しているか確認しましょう。
- Power Query のキャッシュが古い場合は、更新ボタンで再読み込みを行ってください。
✅ 6. まとめ
Power Query を使えば、ユーザーが入力した条件に応じて、データを動的に抽出することができます。これにより、柔軟で再利用可能なレポートやダッシュボードを構築することが可能になります。


