各カテゴリの合計を求める

単価と数量から各カテゴリの小計を求める。

数式1(SUM 関数)

=LET(
  範囲, B2:D999,
  カテ, TOCOL(INDEX(範囲,, 1), 1),
  単価, TOCOL(INDEX(範囲,, 2), 1),
  数量, TOCOL(INDEX(範囲,, 3), 1),
  一意カテ, UNIQUE(カテ),
  小計, BYROW(一意カテ, LAMBDA(x, SUM((カテ=x)*単価*数量))),
  HSTACK(一意カテ, 小計)
)

数式2(SUMPRODUCT 関数)

=LET(
  範囲, B2:D999,
  カテ, TOCOL(INDEX(範囲,, 1), 1),
  単価, TOCOL(INDEX(範囲,, 2), 1),
  数量, TOCOL(INDEX(範囲,, 3), 1),
  一意カテ, UNIQUE(カテ),
  小計, BYROW(一意カテ, LAMBDA(x, SUMPRODUCT(N(カテ=x),単価,数量))),
  HSTACK(一意カテ, 小計)
)

数式3(MMULT 関数)

=LET(
  範囲, B2:D999,
  カテ, TOCOL(INDEX(範囲,, 1), 1),
  単価, TOCOL(INDEX(範囲,, 2), 1),
  数量, TOCOL(INDEX(範囲,, 3), 1),
  一意カテ, UNIQUE(カテ),
  UxN, N(一意カテ=TRANSPOSE(カテ)),
  NxI, 単価*数量,
  小計, MMULT(UxN, NxI),
  HSTACK(一意カテ, 小計)
)

MMULT 関数を使う時は、分かりやすいように行列のサイズを変数名にしている。

  • U:Unique の頭文字。
  • N:Number の頭文字。
  • x :×(\times)の代わり。
  • I :1の代わり。※ 変数名に数字は使えない。

ちなみに、小計を基準に並び替えたい場合は、SORT 関数を使う。

=LET(
  範囲, B2:D999,
  カテ, TOCOL(INDEX(範囲,, 1), 1),
  単価, TOCOL(INDEX(範囲,, 2), 1),
  数量, TOCOL(INDEX(範囲,, 3), 1),
  一意カテ, UNIQUE(カテ),
  小計, BYROW(一意カテ, LAMBDA(x, SUMPRODUCT(N(カテ=x),単価,数量))),
  SORT(HSTACK(一意カテ, 小計), 2, -1)
)

行列に慣れているなら、最初から数式3(MMULT 関数)を利用した方が分かりやすい気がする。

Microsoft Copilot がダミーデータを生成してくれた。便利だ。

コメントする

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