shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Power Query】グループごとのTableから値取得する事例

Power QueryでグループごとのTableから値取得する事例です。

この方法は、複数の「単票形式のExcelシート」を処理したい場合や、複数行ごとの表を一行に変換したい場合などに活用できます。

内容:

使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2403)です。

アウトプットイメージ

列フィールドにあるTableから値を取得し、一覧表を作成します。

各レコードにテーブルがある

グループごとにTableがあるデータの処理イメージ

テーブルから値を取得する場合の「基本的な考え方」は次のとおりです。

テーブル名[フィールド名]{インデックス位置}

詳細: 式、値、および let 式 - PowerQuery M | Microsoft Learn

事例の前提

今回の事例の題材は、複数行ごとの表を一行に変換したい場合として、次の事例と同様の処理をします。

shikumika.org

今回は、上記事例の手順で

1.対象のデータをPowerQueryに取り込み
2.同じ1件を識別するため「NO」列の値を「フィル」で埋める
3.1件分のレコードごとの「Table」を作成

が完了している状態とします。

なお、この事例は、Tableの値を参照するカスタム列を一つずつ追加する方法です。

「ピボット解除」の機能を使用しないので、Excelの数式に近いイメージで、カスタム列の設定数が少ない場合に適した方法と思います。

 

具体的な手順

事例の前提のとおり、【Power Query】複数行ごと(例外あり)の表を一行に変換する方法において、

 3.1件分のレコードごとの「Table」を作成

まで設定が完了した状態が下図です。

グループ化したデータが「Table」に変換された状態です。

「NO」列でグループ化され、その他は「Table」になっている

「グループ化」の設定イメージ

なお、上図のとおり該当の「Table」を選択すると、PowerQueryエディターの画面下側で「Table」内容を確認することができます(上図は、「グループ別テーブル」列の1行目の「Table」を選択した状態)。

1.Tableから該当する値を取得

「列の追加」ー「カスタム列」をクリックし、カスタム列の式を次のようにします。

グループ別テーブル」列にTableがあり、そのTable内の「申請者」列の1番目に該当する値を取得したい場合

カスタム列の式: [グループ別テーブル][申請者]{0}

PowerQueryは”0”からカウントするので、”0”が1番目に該当します。

カスタム列の式に、[グループ別テーブル][申請者]{0} を設定

カスタム列の設定例

上記の結果、新しい列が追加され、指定した値が取得できました。

新しい列が追加され、指定した値が取得できている

カスタム列の設定後イメージ

2.手順1を繰り返す(値取得をしたい回数)

他の値も同様に手順1を繰り返します。

最終的なPowerQueryの設定イメージ(全体)は下図のとおりです。

適用したステップ「グループ化された行」のあとは、「追加されたカスタム」というステップが抽出したい数だけ存在し、最後に余分な列を削除しています。

「追加されたカスタム」というステップが抽出したい数だけ存在します

PowerQueryの設定イメージ

その他の方法(列のピボット解除)

この手順は、Tableの値を参照するカスタム列を一つずつ追加する方法です。

そのため、抽出したい値が多い場合は設定が手間となります。その場合は、事例の前提で示した次の「ピボット解除」の機能を使用した方法が効率的かもしれません。

shikumika.org

以上、Power QueryでグループごとのTableから値取得する事例でした。