Power Queryで複数行ごとの表を1行に変換する事例として、繰り返しの行数が変動する場合の対応事例です。
繰り返しの行数が固定の場合は、【Power Query】複数行ごとの表を1行に変換(一つ下の値を参照)をご覧ください。
内容:
使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2403)です。
アウトプットイメージ
下図左側のように、基本的な項目パターンは一致するものの、2行や3行のデータ、空白行があるような例外がある表を右側の一行に変換します。
「NO」列の値で、1件のレコードとして複数行をまとめます。
Excelのみを用いた場合の処理事例は次のとおりで、この内容をPowerQueryで実現する方法です。
PowerQueryの設定イメージ
この事例で、複数行ごと(例外あり)の表を一行に変換するPowerQueryの設定イメージは、次のとおりです。「ピボット解除」や「フィル」の機能を用いて13ステップの事例です。
なお、処理対象のデータ状況によりますが、Tableの値を参照するカスタム列を一つずつ追加する方法もあります(カスタム列の設定数が少ない場合は適している見込)。この方法は、【Power Query】グループごとのTableから値取得する事例で紹介しています。
基本知識
基本知識として、次の「列のピボット解除で、単票形式のExcelシートからセルの値を抽出」と同様の手順が多くあります。
この事例では、初めに下記と同様なデータ状態として処理をしていますので、随時参照してください。
具体的な手順
冒頭のアウトプットイメージ左側のExcelファイルを前提に以下説明します。
1.対象のデータをPowerQueryに取り込み
Excelの「データ」タブから「テーブルまたは範囲から」をクリック、対象のデータをPowerQueryに取り込む。
取り込んだデータがPowerQueryエディターで次のように表示される。
なお、PowerQueryに取り込む方法が不明な場合は、【Power Queryの初歩】簡単な事例説明(使いながら覚える最初のポイント) を参考にする。
2.同じ1件を識別するため「NO」列の値を「フィル」で埋める
「NO」列の値で1件分のデータを識別したいが「空白」の値もある。空白の値は「フィル」機能を使用して「上と同じ値」を入力する。
「NO」列に下方向のフィルを実施した結果が次のとおり。
なお、フィルの詳細が不明な場合は、【Power Query】空白セルがある場合に「上のセルと同じ値」を一括入力を参考にする。
3.1件分のレコードごとの「Table」を作成
1件分のレコードをまとめるため、「グループ化」機能で、「NO」列が同じ値ごとのテーブルを作成する。
具体的には、「変換」タブの「グループ化」をクリックし、設定画面で以下とする。
- グループ化する列を「NO」列に設定
- 「新しい列名」は適当な名称(事例では、”グループ別テーブル”としている)
- 「操作」の欄は「すべての行」
上記で「操作」の欄に「すべての行」を設定しているので、グループ化したデータが次のように「Table」に変換される。
なお、上図のとおり、該当の「Table」を選択すると、PowerQueryエディターの画面下に「Table」内容を確認することができる(上図は1行目の「Table」を選択した状態)
4.1件分のレコードごとの「Table」に行の位置を示すインデックス追加
「Table」を1行に展開する準備として、行の位置を示すインデックスを追加する。
具体的には、「カスタム列」で以下を追加する。
Table.AddIndexColumn([グループ別テーブル],"行",1)
補足: ”グループ別テーブル”は「Table」がある列名
”行”は追加するインデックスの列名
以下は、「新しい列名」を”グループ別テーブルの変換”とした設定例。
上記の設定により、次のように「新しい列名」を”グループ別テーブルの変換”が追加され、「行番号(インデックス)が付与された「Table」ができる。
なお、Tableごとに行が1から始まる連番が付与されている。
5.余分な列を削除する
処理の結果、「グループ別テーブルの変換」のデータに、「NO」列、「グループ別テーブル」列の情報は含まれている。余分なので、「NO」列、「グループ別テーブル」列を削除する。
6.行位置を含む「Table」を展開する
前手順で残した「グループ別テーブルの変換」を展開する。
なお、展開の設定は次のとおり。
「すべての列の選択」のチェックをつける。
・「元の列名をプレフィックスとして使用します」のチェックを外す。
展開により、次のように同じ1件のレコードを示す「NO.1」列と「行」列が追加された状態になる。
7.列のピボット解除でExcelセルの値を抽出する方法と同様処理
前手順で、基礎知識の「列のピボット解除で、単票形式のExcelシートからセルの値を抽出」と同様のデータ状態になっている。
以降の手順は、次のページで「その他の列のピボット解除」と同様に処理することで、冒頭のアウトプットが可能。
以上、Power Queryで複数行ごと(例外あり)の表を1行に変換する事例でした。