スプレッドシートで行列式を手計算しようとすると、2×2行列でも面倒ですよね。3×3以上になると符号や項の組み合わせを間違えやすく、せっかく計算しても答えが合わないこともしばしばあります。
そんなときに役立つのがMDETERM関数です。正方行列を範囲指定するだけで、行列式(determinant)をワンクリックで求められます。行列式が0かどうかが分かれば、逆行列の有無や連立方程式の解の存在もすぐに判定できますよ。
この記事では、スプレッドシートのMDETERM関数の基本構文から、2×2・3×3・4×4の具体例、よくあるエラーと対処法、MINVERSE関数やMMULT関数との連携、IF関数を使った自動判定まで、実務でそのまま使えるレベルで解説していきます。
スプレッドシートのMDETERM関数とは?
MDETERM関数は、正方行列(行数と列数が等しい行列)の行列式を返す関数です。
読み方は「マトリックス ディターミナント」。「Matrix」は行列、「Determinant」は行列式を意味します。覚えにくければ「Matrix DETERMinant」と分解して覚えると忘れません。
行列式は、行列全体を1つの数値(スカラー値)で表したものです。一見すると地味な値ですが、行列の性質を測る重要な指標として線形代数で大活躍します。
具体的には、行列式は次のような情報を持っています。
- 行列が逆行列を持つかどうかの判定(0なら持たない)
- 連立方程式に一意の解が存在するかの判定(0なら一意の解なし)
- 行列が表す線形変換の拡大率(2D・3Dグラフィックスでよく使われる)
- 行列の線形独立性(行や列同士が比例関係にないか)
数学や統計、エンジニアリング系の計算で登場することが多い関数ですが、使い方自体はシンプルです。セル範囲を指定するだけで一発で結果が返ってきますよ。
MDETERM関数の書き方
基本構文
=MDETERM(正方行列)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 正方行列 | 必須 | 行列式を計算する、行数と列数が等しい配列またはセル範囲 |
引数は1つだけなので、覚えやすいですね。MAX関数やSUM関数のように複数引数を取らないので、書き間違いも起こりにくいです。
セル範囲(例: A1:B2)のほか、配列定数(例: {1,2;3,4})も指定できます。配列定数では、カンマが列区切り、セミコロンが行区切りです。スプレッドシートの言語設定によってはカンマがスラッシュに置き換わることがあるので、エラーが出たら区切り文字を切り替えてみてください。
なお、Excel版の同名関数とほぼ同じ仕様ですが、スプレッドシートでは配列数式として自動で展開されるため、Ctrl+Shift+Enter は不要です。普通にEnterで確定できます。
MDETERM関数の基本的な使い方
2×2行列の行列式を求める
まずは最もシンプルな2×2行列から試してみましょう。
セルA1:B2に以下のデータが入っているとします。
| A | B | |
|---|---|---|
| 1 | 3 | 6 |
| 2 | 1 | 1 |
任意のセルに次の数式を入力します。
=MDETERM(A1:B2)
結果は -3 になります。
これは手計算でも確認できます。2×2行列の行列式は「ad − bc」の公式で求められます。左上 × 右下 − 右上 × 左下と覚えると分かりやすいです。
3 × 1 − 6 × 1 = 3 − 6 = −3
関数の結果と一致しましたね。
配列定数を使って直接入力する方法もあります。セルに行列データを置かずに、その場で計算したいときに便利です。
=MDETERM({3,6;1,1})
こちらも同じく -3 が返ります。アドホックに行列式を確認したいときは、配列定数の方が手早いですよ。
3×3行列の行列式を求める
次に3×3行列の例を見てみましょう。
セルA1:C3に以下のデータが入っているとします。
| A | B | C | |
|---|---|---|---|
| 1 | 3 | 6 | 1 |
| 2 | 1 | 1 | 0 |
| 3 | 3 | 10 | 2 |
=MDETERM(A1:C3)
結果は 1 になります。
3×3行列の行列式は「サラスの公式」で手計算できます。1行目を基準に余因子展開すると次のとおりです。
3×(1×2 − 0×10) − 6×(1×2 − 0×3) + 1×(1×10 − 1×3)
= 3×(2 − 0) − 6×(2 − 0) + 1×(10 − 3)
= 6 − 12 + 7
= 1
途中で符号を間違えやすいので、3×3以上は素直にMDETERM関数に任せるのが安心です。
4×4以上の行列の行列式を求める
4×4行列になると、手計算ではほぼ無理ゲーです(展開項が24個になります)。MDETERM関数の真価はここで発揮されます。
たとえば次のような4×4行列を考えてみましょう。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 1 | 2 | 0 | 1 |
| 2 | 0 | 1 | 3 | 2 |
| 3 | 2 | 0 | 1 | 1 |
| 4 | 1 | 1 | 0 | 2 |
=MDETERM(A1:D4)
結果は 3 になります。手計算で同じ値にたどり着くには30分以上かかるところを、関数なら一瞬です。
スプレッドシートでは理論上、最大 73×73 程度の行列までは扱えるとされています。実務では4×4〜10×10程度までが現実的な範囲です。
実践的な使い方・応用例
行列式が0かどうかで逆行列の存在を判定する
行列式が0の行列は「特異行列(singular matrix)」と呼ばれます。特異行列には逆行列が存在しません。
たとえば、以下のような行列を考えてみましょう。
| A | B | |
|---|---|---|
| 1 | 2 | 4 |
| 2 | 1 | 2 |
=MDETERM(A1:B2)
結果は 0 になります(2×2 − 4×1 = 0)。
よく見ると、2行目が1行目のちょうど半分になっていますよね。このように行同士(または列同士)が比例関係にある行列は特異行列になります。データに「実質的に同じ情報」が含まれているとも言えます。
逆行列が必要な計算の前に、MDETERM関数で行列式を確認しておくとエラーを未然に防げますよ。回帰分析で説明変数同士に強い相関がある場合(多重共線性)も、行列式が0に近づきます。
連立方程式の解の存在を判定する
連立方程式は、係数を行列にまとめることで解の存在を判定できます。
たとえば、次の連立方程式を考えます。
2x + 3y = 8
4x + 6y = 16
係数行列は次のとおりです。
| A | B | |
|---|---|---|
| 1 | 2 | 3 |
| 2 | 4 | 6 |
=MDETERM(A1:B2)
結果は 0 です(2×6 − 3×4 = 0)。
行列式が0ということは、この連立方程式には「一意の解が存在しない」ことを意味します。実際に2つ目の式は1つ目の式の2倍なので、独立した情報を持っていません。
IF関数と組み合わせれば、判定を自動化できます。
=IF(MDETERM(A1:B2)=0, "一意の解なし", "一意の解あり")
複数の連立方程式をシート上で同時にチェックしたいときに便利です。プロジェクト管理やシミュレーションの前処理で重宝しますよ。
MDETERM関数とMINVERSE関数を組み合わせる
逆行列を求めるMINVERSE関数は、行列式が0だと #NUM! エラーになります。事前にMDETERM関数でチェックしておくと、エラーで止まらず安全に処理できます。
=IF(MDETERM(A1:C3)<>0, MINVERSE(A1:C3), "逆行列なし")
行列式が0でなければ逆行列を計算し、0ならメッセージを表示します。
さらに、行列式と逆行列・MMULT関数を組み合わせれば、連立方程式を一括で解くこともできます。Ax = b の解は x = A⁻¹b なので、次のように書けます。
=IF(MDETERM(A1:C3)<>0, MMULT(MINVERSE(A1:C3), E1:E3), "解なし")
3変数の連立方程式が、たった1つの数式で解けるのは爽快ですね。
NOTE
MDETERM関数の計算精度は約16桁です。理論上は0になる行列式でも、
1E-16程度の微小な値が返ることがあります(浮動小数点演算の宿命です)。厳密に判定したい場合は=ROUND(MDETERM(A1:C3), 10)=0のように丸めてから比較するか、=ABS(MDETERM(A1:C3))<1E-10のように許容誤差付きで判定してみてください。
行列式の符号で向きの反転を判定する
2D・3Dグラフィックスやデータの座標変換では、行列式の符号が重要になります。
- 行列式が 正: 元の向きを保持した変換
- 行列式が 負: 鏡像反転を含む変換
- 行列式の 絶対値: 面積(2D)または体積(3D)の拡大率
たとえば、ある2次元変換行列の行列式が -2 だった場合、「向きが反転し、面積が2倍になる変換」だと一目で分かります。CADや図形処理を扱う場面では、変換結果を試す前に行列式で挙動を予測できるのは大きなメリットです。
データ分析での多重共線性チェック
回帰分析やクラスター分析を行う際、説明変数同士に強い相関があると結果が不安定になります。これを「多重共線性」と呼びます。
説明変数の相関行列の行列式をMDETERM関数で計算すると、その状態を簡易チェックできます。
=MDETERM(相関行列の範囲)
行列式が 0に近いほど多重共線性が強い ことを意味します。経験的には 0.1 を下回ると要注意、0.01 を下回ると重大な問題と判断されることが多いです。回帰分析の前処理として、説明変数の数を絞ったり、主成分分析で変数を合成したりする判断材料として使えますよ。
IF + IFERROR との組み合わせで堅牢にする
実務で使うときは、エラー処理も組み合わせると安心です。IFERROR で囲んでおけば、不正なデータが入ってもシートが壊れません。
=IFERROR(IF(ABS(MDETERM(A1:C3))<1E-10, "特異行列", MDETERM(A1:C3)), "計算不可")
これで「特異行列なら警告」「数値以外なら計算不可」「それ以外は数値を表示」という3パターンを1つの数式で表現できます。
よくあるエラーと対処法
#VALUE! エラー
#VALUE! エラーが出る原因は主に3つあります。
原因1: 正方行列でない
行数と列数が異なるセル範囲を指定するとエラーになります。
=MDETERM(A1:C2) → #VALUE!(2行3列は正方行列でない)
指定するセル範囲が正方形(2×2、3×3、4×4 など)になっているか確認してください。行と列の数を数えて一致しているか、まずチェックしましょう。
原因2: 数値以外のセルが含まれている
セル範囲に空白セルや文字列が含まれている場合もエラーになります。
=MDETERM(A1:B2) → #VALUE!(A2が空白の場合)
すべてのセルに数値が入力されているかチェックしましょう。空白セルがある場合は0を入力すれば解決します。ISBLANK で事前に空白チェックを入れておくと安心です。
原因3: 全角数字が混ざっている
「1」(半角)ではなく「1」(全角)が混ざっていると、見た目は数値でも文字列として扱われエラーになります。VALUE 関数で変換するか、置換機能で全角→半角に揃えてください。
| エラー | 主な原因 | 対処法 |
|---|---|---|
#VALUE! | 行数と列数が不一致 | 正方行列(N×N)のセル範囲を指定する |
#VALUE! | 空白・文字列を含む | すべてのセルに数値を入力する |
#VALUE! | 全角数字が混在 | 半角数字に統一する |
#NUM! | 計算オーバーフロー | 値のスケールを揃える(正規化する) |
微小な値が返るときの対処
特異行列のはずなのに 1E-16 のような微小値が返ることがあります。これは浮動小数点演算による誤差で、関数のバグではありません。
=ROUND(MDETERM(A1:C3), 10)
このように ROUND で適切な桁に丸めてから判定すれば、現実的な精度で0扱いにできます。
関連する行列関数との使い分け
スプレッドシートには、MDETERM関数以外にも行列計算に使える関数があります。組み合わせて使うことで、線形代数の計算をシート上で完結させられます。
| 関数 | 機能 | 用途 |
|---|---|---|
| MDETERM | 行列式を返す | 逆行列の存在判定、連立方程式の解の判定 |
| MINVERSE | 逆行列を返す | 連立方程式を解く、変換行列の逆変換 |
| MMULT | 行列の積を返す | 座標変換、重み付き合計の一括計算 |
| TRANSPOSE | 行と列を入れ替える | 表の縦横変換、データ整形 |
行列計算の基本的な流れは次のとおりです。
- MDETERM で行列式を計算し、0でないことを確認
- 0でなければ MINVERSE で逆行列を求める
- MMULT で逆行列と定数項ベクトルを掛けて解を得る
- 必要に応じて TRANSPOSE で結果を整形する
この4つを覚えておけば、スプレッドシート上で線形代数の基本操作はほぼ網羅できます。
よくある質問(FAQ)
Q1. MDETERM関数はExcelでも使えますか?
はい、Excelにも全く同じ名前・同じ仕様のMDETERM関数があります。スプレッドシートとExcelで数式を相互コピーしても問題なく動作します。ただし、Excelでは古いバージョン(2019以前)の場合、配列数式として Ctrl+Shift+Enter で確定する必要があります。Microsoft 365 / Excel 2021以降はスプレッドシートと同じく通常のEnterでOKです。
Q2. 行列式が極端に小さい値(1E-15など)が返ります。これは0と見なしていいですか?
はい、ほぼ0と見なして問題ありません。これは浮動小数点演算の丸め誤差によるもので、理論上は0になる行列式が微小な非ゼロ値として返るケースです。=ABS(MDETERM(A1:C3))<1E-10 のように許容誤差付きで判定するのが実務的です。厳密性が必要な場合は、行列の値を整数や分数で扱える別ツール(Pythonのsympy等)を検討してください。
Q3. 1×1行列の行列式は計算できますか?
はい、計算できます。1×1行列の行列式は、その唯一の要素そのものです。たとえば =MDETERM(A1:A1) でセルA1の値がそのまま返ります。実用性は低いですが、関数の挙動を確認するときの参考になります。
Q4. 行列のサイズが大きい(50×50など)と動作が遅くなりますか?
体感できるほど遅くはなりません。MDETERM関数は内部で効率的なアルゴリズム(LU分解など)を使っているため、50×50程度の行列でも一瞬で結果が返ります。ただし、行列のサイズが大きくなるほど浮動小数点誤差が累積しやすくなる点には注意してください。
Q5. 行列式の値が負になりました。これは何か意味がありますか?
はい、意味があります。行列式の符号は、その行列が表す線形変換の「向き」を示しています。負の値は鏡像反転を含む変換であることを意味します。絶対値は面積(2D)または体積(3D)の拡大率を表します。たとえば行列式が -3 なら「向きが反転し、面積が3倍になる変換」と読み取れます。グラフィックスや座標変換で役立つ性質です。
まとめ
MDETERM関数は、正方行列の行列式を求める関数です。シンプルですが、線形代数の世界では中心的な役割を果たします。
- 構文は
=MDETERM(正方行列)で、引数は1つだけ - 2×2行列なら「ad − bc」、3×3以上はサラスの公式や余因子展開で計算される
- 行列式が 0 → 特異行列(逆行列が存在しない)
- 行列式の 符号 → 線形変換の向き反転を示す
- 連立方程式の解の存在判定や、回帰分析の多重共線性チェックにも活用できる
#VALUE!エラーは正方行列でない、または数値以外のセルが原因- 微小値はROUND関数やABS関数で丸めて判定する
数学的な関数ではありますが、使い方自体はセル範囲を指定するだけなので難しくありません。逆行列・連立方程式・座標変換・統計分析など、行列を扱う場面でぜひ活用してみてください。MINVERSE関数やMMULT関数と組み合わせれば、スプレッドシート1枚で線形代数の主要な計算を完結できますよ。
まずは身近な2×2行列で =MDETERM(範囲) を試して、結果が手計算の ad − bc と一致するか確認するところから始めるのがおすすめです。感覚をつかんだら、3×3・4×4と段階的にステップアップしていきましょう。慣れてくれば、複雑な線形代数の計算もスプレッドシート上でサクッとこなせるようになりますよ。
