各カテゴリの最高値を求める

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

数式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 検索した時の助けになるように、記事を書いているような気がしてきた。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です