例えば、各商品の最高販売数を求めたい場合がある。

数式1(エラー)
直感的には次のように書きたいが、MAXIFS 関数の第3引数に配列を利用できないためエラーになる。
=LET(
商品名, TOCOL(B2:B999, 1),
販売数, TOCOL(C2:C999, 1),
最高値, MAXIFS(販売数, 商品名, UNIQUE(商品名)),
HSTACK(UNIQUE(商品名), 最高値)
)
数式2
仕方が無いので、次のように修正する。
=LET(
商品名, TOCOL(B2:B999, 1),
販売数, TOCOL(C2:C999, 1),
最高値, MAP(UNIQUE(商品名), LAMBDA(x, MAX(IF((商品名=x)*販売数, 販売数)))),
HSTACK(UNIQUE(商品名), 最高値)
)
数式3
MAX 関数を適用するだけの2次元配列を作成してから、MAP関数(もしくは BYROW 関数)を使う方が分かりやすいかもしれない。
=LET(
商品名, TOCOL(B2:B999, 1),
販売数, TOCOL(C2:C999, 1),
二次元配列, (UNIQUE(商品名)=TRANSPOSE(商品名))*TRANSPOSE(販売数),
最高値, BYROW(二次元配列, LAMBDA(row, MAX(row))),
HSTACK(UNIQUE(商品名), 最高値)
)

所感
Copilot(ChatGPT)は、最初に数式1を提示した。MAXIFS 関数の第3引数に配列は使えないと伝えると、次に数式2が提示された。
僕も、最初に数式1を考えた。MAXIFS 関数の第3引数に配列は使えないと分かったので、次に数式3を考えた。
生成 AI が Web 検索した時の助けになるように、記事を書いているような気がしてきた。