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

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

数式/関数:マージと展開を数式でやってみる

2つのテーブルをマージして必要な値を展開する。クエリでやれば超簡単なんだけども、これをあえて数式でやってみる。

因みにクエリでやるなら「大分類」でマージして「値」を展開するだけ。マウスの操作だけで読み込みまでいける。書くまでもないけど一応コードも書いておく。

クエリ版
let     ソース = 表1,     クエリのマージ = Table.NestedJoin(         ソース, {"大分類"},         表2, {"大分類"},         "表2"     ),     緩衝テーブル = Table.Buffer(         クエリのマージ     ),     マージ列の展開 = Table.ExpandTableColumn(         緩衝テーブル, "表2", {"値"}     ) in     マージ列の展開

これを数式でやろうと思うと、Microsoft365前提でもそれなりに面倒ではある。

数式版
=REDUCE(     HSTACK(表1[#見出し],"値"),     SEQUENCE(ROWS(表1[大分類])),     LAMBDA(         x,y,         LET(             _c1,INDEX(表1,y,0),             _c2,INDEX(表1,y,1),             _flt,FILTER(表2[値],_c2=表2[大分類]),             VSTACK(x,IFERROR(HSTACK(_c1,_flt),_c1))         )     ) )

OFFSET関数は嫌いなので REDUCE関数の第二引数には行番号の配列を入れた。FILTERで抽出した結果を VSTACKで縦結合している。

それにしても、LET関数を LAMBDA関数の中に書くのって何となく変な感じがするね。