Sheet基本
MMULT 完全ガイド
MMULT 完全ガイド
行列の積で複雑な集計を1式で解く
行列の掛け算をするMMULT。難しく聞こえるが「複数条件の重み付け集計」「縦横を入れ替えた合計」など、SUMPRODUCTでも書けない集計を1本で解決する。
GASとの関係:数値計算は関数で、処理ロジックはGASで
MMULTで行う行列積はGASでのfor-loopに相当しますが、スプレッドシートの方が遥かに高速です。GASはデータの読み書き・自動実行を担い、重い計算はシートの関数に任せる設計が効果的です。
GASで自動化を学ぶ →目次
MMULTとは
MMULT(Matrix Multiply)は2つの行列の積を計算する関数です。本来は線形代数の行列計算ですが、実務では「ある配列×別の配列でグループ別の累積合計を出す」「条件付きの集計を行列積で表現する」といった用途に使われます。
基本構文
=MMULT(行列1, 行列2)
行列1の列数と行列2の行数が一致している必要があります。
実務でよく使うパターン
パターン1:各行の複数列の合計(SUMの代替)
// A2:E2の横5列の合計をMMULTで(通常はSUMでよい)
=MMULT(A2:E2, {1;1;1;1;1}) // 1の縦ベクトルとの積 = 合計
// ARRAYFORMULA + MMULT で全行の合計を1式で(B〜D列の合計)
=MMULT(B2:D100, {1;1;1})
パターン2:重み付き平均(スコアリング)
// 評価項目A,B,Cに重み[0.5, 0.3, 0.2]をかけた加重平均スコア
// B2:D100が評価点、E1:G1が重み
=MMULT(B2:D100, TRANSPOSE({0.5, 0.3, 0.2}))
パターン3:クロス集計(各行と各列の組み合わせ)
// 行方向のデータと列ヘッダーのマッチング集計
// 複雑な SUMPRODUCT を1本で書ける場合がある
パターン4:条件付きの行方向累積(COUNTIFの代替)
// B2:B100の各値がA2:A100のどれかと一致する件数
=MMULT(--(A2:A100=TRANSPOSE(B2:B100)), ROW(B2:B100)^0)
MMULTが必要になるサイン
- SUMPRODUCT が複雑になりすぎて管理できない
- 行×列の掛け算・合計を2次元的にまとめて出したい
- 重み付きスコアを複数行に一括適用したい
MMULTは強力ですが読みにくくなりやすいため、まず SUMPRODUCT や SUMIFS で代替できないか試してから使うのが良い設計です。
よくあるエラー
| エラー | 原因 |
|---|---|
| #VALUE! | 行列1の列数≠行列2の行数。次元が合っていない |
| #N/A | 範囲に空白やテキストが混入している |
// {1;1;1}は3行1列の縦ベクトル(セミコロンで行区切り)
// {1,1,1}は1行3列の横ベクトル(カンマで列区切り)
// この向きを間違えると#VALUE!になる
この知識をGASで活かす
MMULTで実現する重み付き集計や行列演算は、GASでのfor-loopに相当しますが、スプレッドシート関数の方が高速です。複雑な計算はシートに任せ、GASはデータの読み書き・トリガーの管理に徹する設計が効果的です。
Free Newsletter
AIを業務に活かしたいなら
SMR-Labメルマガ
毎週火曜10時、コピペで使えるChatGPTプロンプト・
GASテンプレートをお届け。登録は1分・完全無料。

