なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:行のグループ化 その4(同じグループのデータを横方向に並べる)

今回は「行のグループ化」のその4。その3はグループ化の際に「区切り文字を使って1つの文字列にまとめる」方法を紹介したけど、今回は個別に横に並べたい時の話。

これまたグループ化だけでは完結しないので、多少加工が必要になる。

まずは「区分」列でグループ化。

新しい列目:テーブル
操作:すべての行
→[OK]

前回説明したとおり、「_」は「テーブルをそのまま表示してね」の意味なので、ここを今回は「インデックス列を追加してね」に変更する。

「_」を「Table.AddIndexColumn(_, "連番", 1, 1)」に変更
「type table [……]」の「……」に「, 連番=number」を追加

「品目」と「連番」にチェックを入れて [元の列名をプレフィックスとして使用します]のチェックを外す →[OK]

[編集]→[書式]→[プレフィックスの追加]

値:品目

これで連番が見出しとして使えるようになったので、後は列のピボットを実行するだけ。


「連番」列を選択した状態で[編集]→[列のピボット] 値列:品目 詳細設定オプションを開いて 値の集計関数:集計しない →[OK]

以上で完成。

おまけ。敢えて数式(365)でやるんだという場合は以下の形で。

=LET(
    grp,UNIQUE(テーブル1[区分]),
    cnt,MAX(BYROW(grp,LAMBDA(a,COUNTIF(テーブル1[区分],a)))),
    fnc,LAMBDA(y,a,IFERROR(INDEX(TRANSPOSE(FILTER(テーブル1[品目],テーブル1[区分]=y)),a),"")),
    itms,DROP(REDUCE(0,grp,LAMBDA(x,y,VSTACK(x,MAP(SEQUENCE(,cnt),LAMBDA(a,fnc(y,a)))))),1),
    VSTACK(HSTACK("区分",TEXT(SEQUENCE(,cnt),"品目0")),HSTACK(grp,itms))
)

対象が文字列なら TEXTJOINでくっつけまくって、TEXTSPLITで分割したほうが分かりやすいかも。