行列計算を簡単に!MMULT関数の使い方と実例

Sheet基本

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分・完全無料。

▶ 無料で登録する

📧 無料メルマガ登録

DX・AI活用のヒントを週1回お届け。登録特典:すぐ使えるプロンプト集&GASテンプレート。

登録情報は第三者に提供しません。いつでも配信停止できます。

目次