スプレッドシートで複数の行列を掛け合わせたいとき、1つずつセルに計算式を入力するのは大変ですよね。行列のサイズが大きくなるほど、ミスも起きやすくなります。
MMULT関数を使えば、2つの行列の積をまとめて計算できます。加重スコアの算出や連立方程式の解法など、実務でも活躍する場面がありますよ。
この記事では、スプレッドシートのMMULT関数の基本から実践的な活用例まで解説します。
スプレッドシートのMMULT関数とは?
MMULT関数は、2つの行列(配列)の積を返す関数です。
読み方は「マトリックス マルチプライ」です。「Matrix」は行列、「Multiply」は掛け算を意味します。
行列の積とは、2つの行列を掛け合わせて新しい行列を作る計算のことです。通常の数値の掛け算とは異なり、行と列の組み合わせで計算します。
行列計算というと難しく感じるかもしれませんが、使い方自体はシンプルです。2つのセル範囲を指定するだけで結果が返ってきますよ。
MMULT関数の書き方
基本構文
=MMULT(配列1, 配列2)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 配列1 | 必須 | 掛け算の左側にあたる行列(セル範囲または配列定数) |
| 配列2 | 必須 | 掛け算の右側にあたる行列(セル範囲または配列定数) |
引数は2つだけなので、覚えやすいですね。
セル範囲(例: A1:B2)のほか、配列定数(例: {1,2;3,4})も指定できます。配列定数では、カンマが列区切り、セミコロンが行区切りです。
行列の積が計算できる条件
MMULT関数で重要なのが、配列1の列数と配列2の行数が一致していることです。この条件を満たさないとエラーになります。
たとえば、配列1が2行3列で配列2が3行2列なら、列数と行数が「3」で一致するので計算できます。結果は2行2列の行列になりますよ。
配列1(2×3)× 配列2(3×2)= 結果(2×2)
結果の行列は「配列1の行数 × 配列2の列数」のサイズになります。
MMULT関数の基本的な使い方
2×2行列どうしの積を求める
まずは最もシンプルな2×2行列から試してみましょう。
セルA1:B2に配列1、セルD1:E2に配列2が入っているとします。
配列1
| A | B | |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 3 | 4 |
配列2
| D | E | |
|---|---|---|
| 1 | 5 | 6 |
| 2 | 7 | 8 |
任意のセル(例: G1)に次の数式を入力します。
=MMULT(A1:B2, D1:E2)
G1:H2に以下の結果が表示されます。
| G | H | |
|---|---|---|
| 1 | 19 | 22 |
| 2 | 43 | 50 |
計算の仕組みを確認してみましょう。行列の積では、左の行列の「行」と右の行列の「列」を組み合わせて、対応する要素を掛けて足します。
G1 = 1×5 + 2×7 = 5 + 14 = 19
H1 = 1×6 + 2×8 = 6 + 16 = 22
G2 = 3×5 + 4×7 = 15 + 28 = 43
H2 = 3×6 + 4×8 = 18 + 32 = 50
配列定数を使って直接入力する方法もあります。
=MMULT({1,2;3,4}, {5,6;7,8})
こちらも同じ結果が返ります。
異なるサイズの行列の積を求める(2×3と3×2)
次に、サイズが異なる行列の掛け算を見てみましょう。
セルA1:C2に2×3の配列1、セルE1:F3に3×2の配列2が入っているとします。
配列1(2×3)
| A | B | C | |
|---|---|---|---|
| 1 | 1 | 2 | 3 |
| 2 | 4 | 5 | 6 |
配列2(3×2)
| E | F | |
|---|---|---|
| 1 | 7 | 8 |
| 2 | 9 | 10 |
| 3 | 11 | 12 |
=MMULT(A1:C2, E1:F3)
配列1の列数(3)と配列2の行数(3)が一致しているので、問題なく計算できます。結果は2×2の行列です。
| H | I | |
|---|---|---|
| 1 | 58 | 64 |
| 2 | 139 | 154 |
検算してみましょう。
H1 = 1×7 + 2×9 + 3×11 = 7 + 18 + 33 = 58
I1 = 1×8 + 2×10 + 3×12 = 8 + 20 + 36 = 64
H2 = 4×7 + 5×9 + 6×11 = 28 + 45 + 66 = 139
I2 = 4×8 + 5×10 + 6×12 = 32 + 50 + 72 = 154
結果が一致しましたね。
実践的な使い方・応用例
加重スコアを一括計算する
MMULT関数が実務で最も活躍するのが、加重スコアの計算です。複数の評価項目にそれぞれ重みを付けて合計スコアを出す場面で便利ですよ。
たとえば、3人の候補者を「技術力」「コミュニケーション」「リーダーシップ」の3項目で評価するケースを考えます。
評価スコア(A1:C3)
| A(技術力) | B(コミュニケーション) | C(リーダーシップ) | |
|---|---|---|---|
| 1 | 80 | 70 | 60 |
| 2 | 65 | 90 | 75 |
| 3 | 90 | 60 | 80 |
重み(E1:E3)
| E | |
|---|---|
| 1 | 0.5 |
| 2 | 0.3 |
| 3 | 0.2 |
重みは「技術力50%・コミュニケーション30%・リーダーシップ20%」という配分です。
=MMULT(A1:C3, E1:E3)
結果は3行1列の行列で、各候補者の加重スコアが一発で計算されます。
| G | |
|---|---|
| 1 | 73 |
| 2 | 74.5 |
| 3 | 79 |
検算してみましょう。
候補者1: 80×0.5 + 70×0.3 + 60×0.2 = 40 + 21 + 12 = 73
候補者2: 65×0.5 + 90×0.3 + 75×0.2 = 32.5 + 27 + 15 = 74.5
候補者3: 90×0.5 + 60×0.3 + 80×0.2 = 45 + 18 + 16 = 79
SUMPRODUCT関数でも同じ計算はできますが、候補者ごとに数式を書く必要があります。MMULT関数なら1つの数式で全員分をまとめて計算できるのがメリットです。
MINVERSE関数と組み合わせて連立方程式を解く
MMULT関数とMINVERSE関数を組み合わせると、連立方程式を解くことができます。
連立方程式は行列で表すと Ax = b の形になります。両辺にAの逆行列を掛けると x = A⁻¹b で解が求まります。
次の連立2元1次方程式を解いてみましょう。
2x + 3y = 8
x + 2y = 5
係数行列AをセルA1:B2に、定数ベクトルbをセルD1:D2に入力します。
係数行列A
| A | B | |
|---|---|---|
| 1 | 2 | 3 |
| 2 | 1 | 2 |
定数ベクトルb
| D | |
|---|---|
| 1 | 8 |
| 2 | 5 |
任意のセル(例: F1)に次の数式を入力します。
=MMULT(MINVERSE(A1:B2), D1:D2)
結果は以下のとおりです。
| F | |
|---|---|
| 1 | 1 |
| 2 | 2 |
つまり x=1, y=2 が解です。検算すると 2(1)+3(2)=8、1(1)+2(2)=5 で合っていますね。
連立方程式を解く前に、MDETERM関数で行列式が0でないか確認しておくと安心です。行列式が0の場合は逆行列が存在せず、解が求められません。
=MDETERM(A1:B2)
結果は 2×2 – 3×1 = 1 で、0ではないので逆行列が存在します。
TRANSPOSE関数と組み合わせて転置してから掛ける
行列の向きが合わないときは、TRANSPOSE関数で転置してからMMULT関数に渡すと便利です。
たとえば、データが横方向(1行3列)に並んでいて、重みも横方向(1行3列)になっている場合を考えます。
データ(A1:C1): {10, 20, 30}
重み(A2:C2): {0.2, 0.3, 0.5}
このままではMMULT関数の条件(配列1の列数=配列2の行数)を満たしません。重みを転置して縦方向に変換します。
=MMULT(A1:C1, TRANSPOSE(A2:C2))
結果は 10×0.2 + 20×0.3 + 30×0.5 = 2 + 6 + 15 = 23 です。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 配列1の列数と配列2の行数が一致していない | 行列のサイズを確認する。必要に応じてTRANSPOSE関数で転置する |
| #VALUE! | セルに数値以外(テキストや空白)が含まれている | 対象範囲のセルがすべて数値で埋まっているか確認する |
| #REF! | 結果の行列がシートの範囲を超える | 出力先に十分なスペースを確保する |
最も多いのは、行列のサイズが合わないことによる #VALUE! エラーです。配列1の列数と配列2の行数が同じかどうか、まず確認してみてください。
似た関数との違い・使い分け
| 関数 | 用途 | 違い |
|---|---|---|
| MMULT | 行列の積を求める | 2つの行列を掛け合わせて新しい行列を生成 |
| MINVERSE | 逆行列を求める | 正方行列の逆行列を返す。MMULTと組み合わせて連立方程式に使う |
| MDETERM | 行列式を求める | 正方行列の行列式(スカラー値)を返す。逆行列の存在判定に使う |
| TRANSPOSE | 行列の転置 | 行と列を入れ替える。MMULTの前処理として使うことが多い |
| SUMPRODUCT | 要素ごとの積の合計 | 同じサイズの配列の対応要素を掛けて合計。行列の積とは計算方法が異なる |
MMULTは「行列の積」、SUMPRODUCTは「要素ごとの積の合計」です。1行×1列の結果ならSUMPRODUCTでも同じ答えが出ますが、結果が行列になる場合はMMULTを使いましょう。
まとめ
スプレッドシートのMMULT関数は、2つの行列の積を求める関数です。
ポイントを振り返りましょう。
- 基本:
=MMULT(配列1, 配列2)で行列の積を計算する - 条件: 配列1の列数と配列2の行数が一致している必要がある
- 加重スコア: 評価項目×重みの計算を1つの数式でまとめて処理できる
- 連立方程式: MINVERSE関数と組み合わせて
=MMULT(MINVERSE(A), b)で解が求まる - 転置との連携: 行列の向きが合わないときはTRANSPOSE関数で変換する
加重スコアの計算は人事評価や商品比較など、さまざまな場面で使えます。ぜひ試してみてください。
