【Power Query】セルの値を使って動的にデータを抽出する方法

# Power Queryでセルの値を使って動的にデータを抽出する方法

## 🧭 1. はじめに

Excel の Power Query は、データの整形や変換を効率的に行える強力なツールです。特に、**ユーザーが入力した条件に応じて動的にデータを抽出する**機能は、レポートやダッシュボードの自動化に非常に役立ちます。

本記事では、別セルに入力された値を元に、Power Query でデータをフィルタする方法を、サンプルデータと共にわかりやすく解説します。

---

## 💡 2. シナリオ例

たとえば、以下のような売上データがあるとします:

- 担当者ごとの売上を管理している
- ユーザーがセルに担当者名を入力すると、その担当者の売上データだけを抽出したい

このようなケースで、Power Query を使えば、**関数やマクロを使わずに**動的な抽出が可能です。

---

## 🛠️ 3. 手順

### 📋 3.1 データの準備

まずは、以下のような売上データを Excel に用意します。テーブル名は `SalesData` とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/5de4dd54-83b0-4161-b74e-0e76c5fd0b6a.png)

#### 🔹 サンプルデータ

| 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)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/f6f271dd-649f-457a-9474-e7ebffed7e9e.png)

| Salesperson |
|-------------|
| Alice       |

このように列名を明示しておくことで、Power Query 側での参照がわかりやすくなります。

---

### 🔄 3.3 Power Query でテーブルを読み込む

Power Query で複数のテーブルを使うには、**それぞれのテーブルを個別に読み込み、クエリとして保存しておく必要があります**。

#### ✅ 手順:

1. Excel の [データ] タブ → [テーブルまたは範囲から] から、売上データのテーブル(例:`SalesData`)を Power Query に読み込みます。
2. Power Query エディタで内容を確認し、[ホーム] タブ → [**閉じて読み込む**] をクリックしてクエリを保存します。
3. 次に、抽出条件を入力したテーブル(例:`FilterSalesperson` や `FilterDateRange`)についても、同様に [データ] タブ → [テーブルまたは範囲から] で読み込みます。
4. Power Query エディタが開いたら、[ホーム] タブ → [閉じて次に読み込む] をクリックします。
5. 表示される [データのインポート] ダイアログで、[**接続の作成のみ**] を選択し、[OK] をクリックしてクエリを保存します。 
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/c4c1fc0e-185d-4b56-927a-12604f8bdd32.png)
6. すべてのテーブルが読み込まれた状態で、[データ] タブ → [データの取得] で [Power Query エディタの起動] でエディタを開き、必要な処理を行います。

---

### 🧮 3.4 M 言語でのフィルタ処理 (担当者名)

Power Query で読み込んだ `SalesData` クエリに対して、`FilterSalesperson` の値を使ってフィルタ処理を行います。

#### ✅ 手順：

1. [データ] タブ → [データの取得] → [クエリの編集] をクリックして、Power Query エディタを開きます。
2. 左側のクエリ一覧から `SalesData` を選択します。
3. [ホーム] タブ → [詳細エディター] をクリックします。
4. 表示された M 言語のコードをそれぞれ以下のように編集します。

```m:FilterSalesperson
let
    Source = Excel.CurrentWorkbook(){[Name="FilterSalesperson"]}[Content]{0}
in
    Source
```

```m:SalesData
let
    Source = Excel.CurrentWorkbook(){[Name="SalesData"]}[Content],
    FilteredRows = Table.SelectRows(Source, each [Salesperson] = @FilterSalesperson[Salesperson])
in
    FilteredRows
```

---

## 🚀 4. 応用:複数条件でのフィルタ (日付範囲)

日付の範囲でフィルタを行いたい場合は、開始日と終了日を1つのテーブルにまとめて管理することができます。

#### ✅ 日付範囲フィルター用テーブル(FilterDateRange)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111975/a2cb921e-01d8-49fa-958b-f638eb82a348.png)

| FilterStartDate | FilterEndDate |
|-----------------|----------------|
| 2023-01-01      | 2023-01-10     |

---

### 🧮 M 言語でのフィルタ処理 (複数条件)

```m:FilterDateRange
let
    Source = Excel.CurrentWorkbook(){[Name="FilterDateRange"]}[Content]{0}
in
    Source
```

```m:SalesData
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 を使えば、ユーザーが入力した条件に応じて、データを動的に抽出することができます。これにより、**柔軟で再利用可能なレポートやダッシュボード**を構築することが可能になります。


# 📚参考サイト

- [M言語 Power Query Formula Language](https://road2cloudoffice.blogspot.com/2017/02/m-power-query-formula-language.html)
- [[Power Query\] 大量のデータベースから、セルに指定した条件でデータを取り出したい](https://road2cloudoffice.blogspot.com/2017/03/power-query.html)
- [Power Query のネストしがちな if-then-else を整理するには](https://qiita.com/PowerBIxyz/items/806dabc37c5d0426b085)
- [ExcelでPowerQueryを使ってデータ収集分析](https://qiita.com/mosugi/items/71df310b35db81722d1e)