<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>行列 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/%e8%a1%8c%e5%88%97/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 28 May 2026 22:58:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>行列 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ExcelのMINVERSE関数の使い方｜逆行列を求めて連立方程式を解く方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-minverse/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-minverse/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Thu, 09 Feb 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[MINVERSE]]></category>
		<category><![CDATA[行列]]></category>
		<category><![CDATA[逆行列]]></category>
		<category><![CDATA[連立方程式]]></category>
		<category><![CDATA[配列数式]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=3335</guid>

					<description><![CDATA[ExcelのMINVERSE関数で正方行列の逆行列を求める方法を解説します。構文・引数の基本から、MMULT関数と組み合わせた連立方程式の解法、よくあるエラー（#VALUE!・#NUM!）の原因と対処法、MDETERM・TRANSPOSE関数との使い分けまで実例付きで紹介。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「Excelで逆行列を求めたいけど、やり方がわからない」「連立方程式をExcelで解けたら便利なのに」と思ったことはありませんか。</p>



<p class="wp-block-paragraph">手計算で逆行列を求めるのは行列が大きくなるほど大変ですし、計算ミスも起きやすいですよね。</p>



<p class="wp-block-paragraph">MINVERSE関数を使えば、正方行列の逆行列をワンステップで算出できます。さらにMMULT関数と組み合わせると、連立方程式の解まで一気に求められます。この記事では基本の使い方から実務で役立つ応用例まで、順を追って解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MINVERSE関数とは？</a></li><li><a href="#toc2" tabindex="0">MINVERSE関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li><li><a href="#toc5" tabindex="0">配列数式としての入力方法</a></li></ol></li><li><a href="#toc6" tabindex="0">基本的な使い方</a><ol><li><a href="#toc7" tabindex="0">2&#215;2行列の逆行列を求める</a></li><li><a href="#toc8" tabindex="0">3&#215;3行列の逆行列を求める</a></li><li><a href="#toc9" tabindex="0">セル参照を使った基本的な入力</a></li></ol></li><li><a href="#toc10" tabindex="0">実務で役立つ活用例</a><ol><li><a href="#toc11" tabindex="0">連立方程式を解く</a></li><li><a href="#toc12" tabindex="0">逆行列の存在確認と検算</a></li></ol></li><li><a href="#toc13" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc14" tabindex="0">まとめ</a><ol><li><a href="#toc15" tabindex="0">関連する行列関数との使い分け</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MINVERSE関数とは？</span></h2>



<p class="wp-block-paragraph">MINVERSE関数は、指定した正方行列（行数と列数が同じ行列）の<strong>逆行列</strong>を返す関数です。</p>



<ul class="wp-block-list"><li><strong>読み方</strong>: マトリックス・インバース（Matrix Inverse）</li><li><strong>語源</strong>: 「M」はMatrix（行列）、「INVERSE」は逆（Inverse）を意味します</li><li><strong>対応バージョン</strong>: Excel 2003以降 / Microsoft 365</li></ul>



<p class="wp-block-paragraph">逆行列とは、元の行列に掛け合わせると単位行列（対角成分が1、それ以外が0の行列）になる行列のことです。数式で書くと「A x A^(-1) = I（単位行列）」という関係が成り立ちます。</p>



<p class="wp-block-paragraph">逆行列が求められるのは、行列式（MDETERM関数で算出できる値）が0でない正方行列に限られます。行列式が0の行列は「特異行列」と呼ばれ、逆行列は存在しません。</p>



<h2 class="wp-block-heading"><span id="toc2">MINVERSE関数の書き方（構文と引数）</span></h2>



<h3 class="wp-block-heading"><span id="toc3">基本構文</span></h3>



<pre class="wp-block-code"><code>=MINVERSE(配列)</code></pre>



<p class="wp-block-paragraph">MINVERSE関数の引数は1つだけなので、とてもシンプルです。</p>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th></tr></thead><tbody><tr><td>配列</td><td>必須</td><td>行数と列数が等しい数値配列（正方行列）を指定します</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>配列に指定できるもの</strong>:</p>



<ul class="wp-block-list"><li>セル範囲（例: B2:D4）</li><li>配列定数（例: {1,2;3,4}）</li></ul>



<p class="wp-block-paragraph"><strong>注意点</strong>:</p>



<ul class="wp-block-list"><li>行数と列数が異なる範囲を指定すると <code>#VALUE!</code> エラーになります</li><li>空白セルや文字列が含まれていると <code>#VALUE!</code> エラーになります</li><li>行列式が0の行列を指定すると <code>#NUM!</code> エラーになります</li></ul>



<h3 class="wp-block-heading"><span id="toc5">配列数式としての入力方法</span></h3>



<p class="wp-block-paragraph">MINVERSE関数は結果を配列（複数のセル）で返します。入力方法はExcelのバージョンによって異なります。</p>



<ul class="wp-block-list"><li><strong>Microsoft 365 / Excel 2021以降</strong>: 1つのセルに <code>=MINVERSE(B2:C3)</code> と入力してEnterキーを押すだけで、結果が自動的にスピル（隣接セルに展開）されます</li><li><strong>Excel 2019以前</strong>: 結果を表示したいセル範囲をあらかじめ選択し、数式を入力した後に <strong>Ctrl + Shift + Enter</strong> で確定します。数式バーに <code>{=MINVERSE(B2:C3)}</code> と波括弧が付けば成功です</li></ul>



<h2 class="wp-block-heading"><span id="toc6">基本的な使い方</span></h2>



<h3 class="wp-block-heading"><span id="toc7">2&#215;2行列の逆行列を求める</span></h3>



<p class="wp-block-paragraph">まずは最もシンプルな2&#215;2行列で試してみましょう。</p>



<p class="wp-block-paragraph">セルB2:C3に以下のような行列が入力されているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>2</td><td>4</td><td>7</td></tr><tr><td>3</td><td>2</td><td>6</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">逆行列を求めるには、結果を表示したいセル（例: E2）に次の数式を入力します。</p>



<pre class="wp-block-code"><code>=MINVERSE(B2:C3)</code></pre>



<p class="wp-block-paragraph">結果として、E2:F3に逆行列の値が表示されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>E</th><th>F</th></tr></thead><tbody><tr><td>2</td><td>0.6</td><td>-0.7</td></tr><tr><td>3</td><td>-0.2</td><td>0.4</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この結果が正しいか確認するには、元の行列と逆行列を掛け合わせて単位行列になるかチェックします。<a href="https://mashukabu.com/excel-function-howto-use-mmult/">MMULT関数</a>を使って <code>=MMULT(B2:C3,E2:F3)</code> と入力すると、対角成分が1、それ以外がほぼ0の単位行列が得られます。</p>



<h3 class="wp-block-heading"><span id="toc8">3&#215;3行列の逆行列を求める</span></h3>



<p class="wp-block-paragraph">3&#215;3以上の行列でも使い方は同じです。</p>



<p class="wp-block-paragraph">セルB2:D4に3&#215;3の行列が入力されている場合、結果を表示したいセル（例: F2）に次のように入力します。</p>



<pre class="wp-block-code"><code>=MINVERSE(B2:D4)</code></pre>



<p class="wp-block-paragraph">F2:H4に3&#215;3の逆行列が展開されます。行列が大きくなるほど手計算は大変ですが、MINVERSE関数なら一瞬で結果が出るのでとても便利です。</p>



<h3 class="wp-block-heading"><span id="toc9">セル参照を使った基本的な入力</span></h3>



<p class="wp-block-paragraph">配列定数を直接指定する方法もあります。2&#215;2行列の場合、次のように書けます。</p>



<pre class="wp-block-code"><code>=MINVERSE({4,7;2,6})</code></pre>



<p class="wp-block-paragraph">配列定数では、列の区切りにカンマ（,）、行の区切りにセミコロン（;）を使います。ただし、行列が大きくなるとセル範囲で指定する方が見やすくなります。</p>



<h2 class="wp-block-heading"><span id="toc10">実務で役立つ活用例</span></h2>



<h3 class="wp-block-heading"><span id="toc11">連立方程式を解く</span></h3>



<p class="wp-block-paragraph">MINVERSE関数の実務的な使い道として最も多いのが、連立方程式を解くケースです。</p>



<p class="wp-block-paragraph">たとえば、次の連立方程式を考えます。</p>



<pre class="wp-block-code"><code>2x + 3y = 8
4x + 1y = 10</code></pre>



<p class="wp-block-paragraph">これを行列の形に変換すると「Ax = b」と表せます。</p>



<ul class="wp-block-list"><li>係数行列 A: <code>{2,3;4,1}</code></li><li>定数ベクトル b: <code>{8;10}</code></li></ul>



<p class="wp-block-paragraph">解は「x = A^(-1) x b」なので、MINVERSE関数と<a href="https://mashukabu.com/excel-function-howto-use-mmult/">MMULT関数</a>を組み合わせます。</p>



<pre class="wp-block-code"><code>=MMULT(MINVERSE(B2:C3),E2:E3)</code></pre>



<p class="wp-block-paragraph">B2:C3に係数行列、E2:E3に定数ベクトルを入力しておくと、この数式で <code>x = 2.6</code>, <code>y = 0.93...</code> といった解が一発で求められます。</p>



<p class="wp-block-paragraph">手順をまとめると次のとおりです。</p>



<ol class="wp-block-list"><li>係数行列をセルに入力する（例: B2:C3）</li><li>定数ベクトルをセルに入力する（例: E2:E3）</li><li>解を表示したいセルに <code>=MMULT(MINVERSE(B2:C3),E2:E3)</code> と入力する</li><li>Enterキーを押す（Excel 2019以前はCtrl+Shift+Enter）</li></ol>



<p class="wp-block-paragraph">3元連立方程式でも同じ考え方で解けます。係数行列を3&#215;3に、定数ベクトルを3行にするだけです。</p>



<h3 class="wp-block-heading"><span id="toc12">逆行列の存在確認と検算</span></h3>



<p class="wp-block-paragraph">逆行列が存在するかどうかを事前にチェックするには、<a href="https://mashukabu.com/excel-function-howto-use-mdeterm/">MDETERM関数</a>で行列式を求めます。</p>



<pre class="wp-block-code"><code>=MDETERM(B2:C3)</code></pre>



<p class="wp-block-paragraph">この結果が0でなければ逆行列が存在します。0の場合はMINVERSE関数を使っても <code>#NUM!</code> エラーになるため、先にMDETERM関数で確認しておくとスムーズです。</p>



<p class="wp-block-paragraph">逆行列が正しいかの検算には、元の行列と逆行列の積が単位行列になるかを確認します。</p>



<pre class="wp-block-code"><code>=MMULT(B2:C3,MINVERSE(B2:C3))</code></pre>



<p class="wp-block-paragraph">結果の対角成分が1、それ以外が0（または非常に小さい値）になっていれば正しく計算されています。浮動小数点の関係で完全な0にならず、1E-16のような極小の値が表示されることがありますが、これは誤差の範囲内なので問題ありません。</p>



<h2 class="wp-block-heading"><span id="toc13">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">MINVERSE関数で発生しやすいエラーと、その原因・対処法をまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#VALUE!</code></td><td>行数と列数が異なる範囲を指定した</td><td>正方行列（2&#215;2、3&#215;3など）になっているか確認する</td></tr><tr><td><code>#VALUE!</code></td><td>配列内に空白セルや文字列が含まれている</td><td>すべてのセルに数値が入力されているか確認する</td></tr><tr><td><code>#NUM!</code></td><td>行列式が0の特異行列を指定した</td><td>MDETERM関数で行列式を確認し、0でないことを確かめる</td></tr><tr><td>極小の値が表示される</td><td>浮動小数点演算の誤差</td><td>ROUND関数で丸める（例: <code>=ROUND(MINVERSE(B2:C3),10)</code>）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>#VALUE!</code> エラーが出たときは、まず指定した範囲が正方形になっているかを確認してください。たとえば2行3列の範囲を指定していないか、途中に空白や文字が混じっていないかをチェックするのがポイントです。</p>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<p class="wp-block-paragraph">MINVERSE関数は、Excelで正方行列の逆行列を求めるための関数です。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしましょう。</p>



<ul class="wp-block-list"><li>MINVERSE関数の引数は「配列」の1つだけ。正方行列を指定する</li><li>Microsoft 365やExcel 2021以降ではスピル対応。Excel 2019以前ではCtrl+Shift+Enterで入力する</li><li>MMULT関数と組み合わせることで連立方程式を解ける</li><li>エラーが出たらまず「正方行列か」「数値のみか」「行列式が0でないか」を確認する</li></ul>



<p class="wp-block-paragraph">逆行列の計算は手作業だとミスが起きやすい処理ですが、MINVERSE関数を使えば正確に素早く結果を得られます。連立方程式を解く場面でもぜひ活用してみてください。</p>



<h3 class="wp-block-heading"><span id="toc15">関連する行列関数との使い分け</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数名</th><th>機能</th><th>入力</th><th>出力</th></tr></thead><tbody><tr><td><a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE</a></td><td>逆行列を求める</td><td>正方行列</td><td>逆行列（配列）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-mmult/">MMULT</a></td><td>行列の積を求める</td><td>2つの行列</td><td>積の行列（配列）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-mdeterm/">MDETERM</a></td><td>行列式を求める</td><td>正方行列</td><td>数値（スカラー）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-transpose/">TRANSPOSE</a></td><td>行と列を入れ替える</td><td>任意の配列</td><td>転置行列（配列）</td></tr></tbody></table></figure>



<ul class="wp-block-list"><li>連立方程式を解きたい → MINVERSE + MMULT</li><li>行列の掛け算をしたい → MMULT</li><li>逆行列が存在するか確認したい → MDETERM</li><li>行と列を入れ替えたい → TRANSPOSE</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-minverse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのMDETERM関数の使い方｜行列式を求めて逆行列の存在を確認する方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-mdeterm/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-mdeterm/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Wed, 08 Feb 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[MDETERM]]></category>
		<category><![CDATA[正方行列]]></category>
		<category><![CDATA[行列]]></category>
		<category><![CDATA[行列式]]></category>
		<category><![CDATA[逆行列]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=3278</guid>

					<description><![CDATA[ExcelのMDETERM関数で正方行列の行列式を求める方法を解説。構文・引数の基本から2x2・3x3行列の計算例、MINVERSE関数と組み合わせた逆行列の存在確認、連立方程式の解の有無判定、浮動小数点誤差の対処法まで実例付きで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「Excelで行列式を求めたいけど、どの関数を使えばいいの?」「行列式が0かどうかで逆行列が存在するか判定したい」と思ったことはありませんか。</p>



<p class="wp-block-paragraph">行列式の手計算は3&#215;3以上になると工程が増えて、計算ミスが起きやすいですよね。</p>



<p class="wp-block-paragraph">MDETERM関数を使えば、正方行列の行列式をワンステップで算出できます。さらにMINVERSE関数と組み合わせれば、逆行列が存在するかどうかの事前チェックにも活用できます。この記事では基本の使い方から実務的な応用まで、順を追って解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MDETERM関数とは?</a></li><li><a href="#toc2" tabindex="0">MDETERM関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc5" tabindex="0">基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">2&#215;2行列の行列式を求める</a></li><li><a href="#toc7" tabindex="0">3&#215;3行列の行列式を求める</a></li><li><a href="#toc8" tabindex="0">配列定数を直接指定する</a></li></ol></li><li><a href="#toc9" tabindex="0">実務で役立つ活用例</a><ol><li><a href="#toc10" tabindex="0">逆行列の存在確認に使う</a></li><li><a href="#toc11" tabindex="0">連立方程式の解の有無を判定する</a></li><li><a href="#toc12" tabindex="0">計算結果の検算に使う</a></li></ol></li><li><a href="#toc13" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc14" tabindex="0">まとめ</a><ol><li><a href="#toc15" tabindex="0">関連する行列関数との使い分け</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MDETERM関数とは?</span></h2>



<p class="wp-block-paragraph">MDETERM関数は、指定した正方行列（行数と列数が同じ行列）の<strong>行列式</strong>（determinant）を返す関数です。</p>



<ul class="wp-block-list"><li><strong>読み方</strong>: マトリックス・ディターミナント（Matrix Determinant）</li><li><strong>語源</strong>: 「M」はMatrix（行列）、「DETERM」はDeterminant（行列式）の略です</li><li><strong>対応バージョン</strong>: Excel 2003以降 / Microsoft 365</li></ul>



<p class="wp-block-paragraph">行列式とは、正方行列から計算される1つの数値のことです。行列式が0でなければ逆行列が存在し、0であれば逆行列は存在しません（このような行列を「特異行列」と呼びます）。</p>



<p class="wp-block-paragraph">行列式は数学・工学・統計の分野で幅広く使われていますが、Excelでの主な用途は次の2つです。</p>



<ul class="wp-block-list"><li>逆行列が存在するか（=連立方程式に解があるか）の判定</li><li>行列に関する各種計算の中間ステップ</li></ul>



<h2 class="wp-block-heading"><span id="toc2">MDETERM関数の書き方（構文と引数）</span></h2>



<h3 class="wp-block-heading"><span id="toc3">基本構文</span></h3>



<pre class="wp-block-code"><code>=MDETERM(配列)</code></pre>



<p class="wp-block-paragraph">MDETERM関数の引数は1つだけなので、とてもシンプルです。</p>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th></tr></thead><tbody><tr><td>配列</td><td>必須</td><td>行数と列数が等しい数値配列（正方行列）を指定します</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>配列に指定できるもの</strong>:</p>



<ul class="wp-block-list"><li>セル範囲（例: B2:C3、B2:D4）</li><li>配列定数（例: <code>{1,2;3,4}</code>）</li></ul>



<p class="wp-block-paragraph"><strong>注意点</strong>:</p>



<ul class="wp-block-list"><li>行数と列数が異なる範囲を指定すると <code>#VALUE!</code> エラーになります</li><li>空白セルや文字列が含まれていると <code>#VALUE!</code> エラーになります</li><li>結果は1つの数値（スカラー値）なので、配列数式として入力する必要はありません</li></ul>



<h2 class="wp-block-heading"><span id="toc5">基本的な使い方</span></h2>



<h3 class="wp-block-heading"><span id="toc6">2&#215;2行列の行列式を求める</span></h3>



<p class="wp-block-paragraph">まずは最もシンプルな2&#215;2行列で試してみましょう。</p>



<p class="wp-block-paragraph">セルB2:C3に以下のような行列が入力されているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>2</td><td>4</td><td>7</td></tr><tr><td>3</td><td>2</td><td>6</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">行列式を求めるには、結果を表示したいセル（例: E2）に次の数式を入力します。</p>



<pre class="wp-block-code"><code>=MDETERM(B2:C3)</code></pre>



<p class="wp-block-paragraph">結果は <strong>10</strong> になります。</p>



<p class="wp-block-paragraph">2&#215;2行列の行列式は「ad &#8211; bc」の公式で手計算できます。上の例では <code>4×6 - 7×2 = 24 - 14 = 10</code> となり、MDETERM関数の結果と一致していますね。</p>



<p class="wp-block-paragraph">行列式が0でないので、この行列には逆行列が存在することもわかります。</p>



<h3 class="wp-block-heading"><span id="toc7">3&#215;3行列の行列式を求める</span></h3>



<p class="wp-block-paragraph">3&#215;3行列でも使い方は同じです。</p>



<p class="wp-block-paragraph">セルB2:D4に以下の行列が入力されている場合を考えます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>2</td><td>3</td><td>6</td><td>1</td></tr><tr><td>3</td><td>1</td><td>1</td><td>0</td></tr><tr><td>4</td><td>3</td><td>10</td><td>2</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">次の数式を入力します。</p>



<pre class="wp-block-code"><code>=MDETERM(B2:D4)</code></pre>



<p class="wp-block-paragraph">結果は <strong>1</strong> になります。</p>



<p class="wp-block-paragraph">3&#215;3以上の行列式の手計算は複雑になりますが、MDETERM関数なら一瞬で結果が出ます。手計算での検算方法を知りたい方のために補足すると、3&#215;3行列では「サラスの公式」を使って次のように展開します。</p>



<pre class="wp-block-code"><code>行列式 = a(ei-fh) - b(di-fg) + c(dh-eg)</code></pre>



<p class="wp-block-paragraph">上の例に当てはめると <code>3(1×2-0×10) - 6(1×2-0×3) + 1(1×10-1×3) = 6 - 12 + 7 = 1</code> となります。</p>



<h3 class="wp-block-heading"><span id="toc8">配列定数を直接指定する</span></h3>



<p class="wp-block-paragraph">セル範囲を使わず、数式の中に配列定数を直接書くこともできます。</p>



<pre class="wp-block-code"><code>=MDETERM({3,6;1,1})</code></pre>



<p class="wp-block-paragraph">結果は <strong>-3</strong> になります（3×1 &#8211; 6×1 = -3）。</p>



<p class="wp-block-paragraph">配列定数では、列の区切りにカンマ（,）、行の区切りにセミコロン（;）を使います。ちょっとした計算の確認には便利ですが、行列が大きくなるとセル範囲で指定する方が見やすくなります。</p>



<h2 class="wp-block-heading"><span id="toc9">実務で役立つ活用例</span></h2>



<h3 class="wp-block-heading"><span id="toc10">逆行列の存在確認に使う</span></h3>



<p class="wp-block-paragraph">MDETERM関数の最も実務的な使い道は、<a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE関数</a>で逆行列を求める前の事前チェックです。</p>



<p class="wp-block-paragraph">逆行列が存在するのは、行列式が0でない場合だけです。行列式が0の行列（特異行列）にMINVERSE関数を使うと <code>#NUM!</code> エラーになってしまいます。事前にMDETERM関数で確認しておくとスムーズです。</p>



<p class="wp-block-paragraph">手順は次のとおりです。</p>



<ol class="wp-block-list"><li>MDETERM関数で行列式を求める</li></ol>



<pre class="wp-block-code"><code>=MDETERM(B2:D4)</code></pre>



<ol class="wp-block-list"><li>結果が0でなければ、MINVERSE関数で逆行列を求める</li></ol>



<pre class="wp-block-code"><code>=MINVERSE(B2:D4)</code></pre>



<ol class="wp-block-list"><li>結果が0なら、その行列には逆行列が存在しないとわかる</li></ol>



<p class="wp-block-paragraph">IF関数と組み合わせて自動判定する方法もあります。</p>



<pre class="wp-block-code"><code>=IF(MDETERM(B2:D4)=0,&quot;逆行列なし&quot;,&quot;逆行列あり&quot;)</code></pre>



<p class="wp-block-paragraph">このようにMDETERM関数を使えば、エラーを出す前に逆行列の有無を判定できます。</p>



<h3 class="wp-block-heading"><span id="toc11">連立方程式の解の有無を判定する</span></h3>



<p class="wp-block-paragraph">連立方程式を行列で表現したとき、係数行列の行列式が0でなければ「ただ1つの解がある」と判定できます。</p>



<p class="wp-block-paragraph">たとえば、次の連立方程式を考えます。</p>



<pre class="wp-block-code"><code>2x + 3y = 8
4x + 1y = 10</code></pre>



<p class="wp-block-paragraph">係数行列は <code>{2,3;4,1}</code> です。MDETERM関数で行列式を求めます。</p>



<pre class="wp-block-code"><code>=MDETERM({2,3;4,1})</code></pre>



<p class="wp-block-paragraph">結果は <strong>-10</strong>（0ではない）なので、この連立方程式にはただ1つの解が存在します。</p>



<p class="wp-block-paragraph">解が存在することを確認できたら、<a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE関数とMMULT関数を組み合わせて実際の解を求められます</a>。</p>



<pre class="wp-block-code"><code>=MMULT(MINVERSE(B2:C3),E2:E3)</code></pre>



<p class="wp-block-paragraph">行列式が0の場合は「解なし」または「無数の解がある」ことを意味するので、連立方程式の立て方を見直す必要があります。</p>



<h3 class="wp-block-heading"><span id="toc12">計算結果の検算に使う</span></h3>



<p class="wp-block-paragraph">MINVERSE関数で求めた逆行列が正しいかどうかを検算するのにも、MDETERM関数が役立ちます。</p>



<p class="wp-block-paragraph">正方行列Aの行列式と、その逆行列A^(-1)の行列式の間には次の関係があります。</p>



<pre class="wp-block-code"><code>det(A) × det(A^(-1)) = 1</code></pre>



<p class="wp-block-paragraph">つまり、元の行列と逆行列の行列式を掛け合わせた結果が1（またはほぼ1）になれば、逆行列の計算が正しいと確認できます。</p>



<pre class="wp-block-code"><code>=MDETERM(B2:C3) * MDETERM(MINVERSE(B2:C3))</code></pre>



<p class="wp-block-paragraph">結果が1であれば計算は正確です。浮動小数点の関係で <code>0.9999999999999998</code> のような値になることがありますが、これは誤差の範囲内なので問題ありません。</p>



<h2 class="wp-block-heading"><span id="toc13">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">MDETERM関数で発生しやすいエラーと、その原因・対処法をまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#VALUE!</code></td><td>行数と列数が異なる範囲を指定した</td><td>正方行列（2&#215;2、3&#215;3など）になっているか確認する</td></tr><tr><td><code>#VALUE!</code></td><td>配列内に空白セルや文字列が含まれている</td><td>すべてのセルに数値が入力されているか確認する</td></tr><tr><td>結果が <code>1E-16</code> のような極小値</td><td>浮動小数点演算の誤差（本来0になるべき計算）</td><td>ROUND関数で丸める（例: <code>=ROUND(MDETERM(B2:C3),10)</code>）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>#VALUE!</code> エラーが出たときは、まず指定した範囲が正方形になっているかを確認してください。たとえば2行3列の範囲を指定していないか、途中に空白や文字が混じっていないかをチェックするのがポイントです。</p>



<p class="wp-block-paragraph">浮動小数点の誤差については補足が必要です。MDETERM関数は約16桁の精度で計算を行うため、本来0になるはずの行列式が <code>1E-16</code>（0.0000000000000001）のような極小の値になることがあります。この値を「0ではない」と判断してしまうと、存在しない逆行列を求めようとしてしまいます。</p>



<p class="wp-block-paragraph">実務では、行列式の絶対値が非常に小さい場合（たとえば <code>1E-10</code> 以下）は「実質的に0」として扱うのが安全です。</p>



<pre class="wp-block-code"><code>=IF(ABS(MDETERM(B2:D4))&lt;1E-10,&quot;特異行列（逆行列なし）&quot;,&quot;逆行列あり&quot;)</code></pre>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<p class="wp-block-paragraph">MDETERM関数は、Excelで正方行列の行列式を求めるための関数です。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしましょう。</p>



<ul class="wp-block-list"><li>MDETERM関数の引数は「配列」の1つだけ。正方行列を指定する</li><li>行列式が0でなければ逆行列が存在し、0なら逆行列は存在しない（特異行列）</li><li>MINVERSE関数で逆行列を求める前の事前チェックに活用できる</li><li>連立方程式の解の有無の判定にも使える</li><li>浮動小数点誤差で <code>1E-16</code> のような極小値が出ることがあるので、ROUND関数やABS関数で対処する</li></ul>



<p class="wp-block-paragraph">行列式の計算は手作業だと3&#215;3以上で煩雑になりますが、MDETERM関数を使えば正確に素早く結果を得られます。<a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE関数</a>と合わせて、行列計算の業務効率化にぜひ活用してみてください。</p>



<h3 class="wp-block-heading"><span id="toc15">関連する行列関数との使い分け</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>関数名</th><th>機能</th><th>入力</th><th>出力</th></tr></thead><tbody><tr><td><a href="https://mashukabu.com/excel-function-howto-use-mdeterm/">MDETERM</a></td><td>行列式を求める</td><td>正方行列</td><td>数値（スカラー）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE</a></td><td>逆行列を求める</td><td>正方行列</td><td>逆行列（配列）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-mmult/">MMULT</a></td><td>行列の積を求める</td><td>2つの行列</td><td>積の行列（配列）</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-transpose/">TRANSPOSE</a></td><td>行と列を入れ替える</td><td>任意の配列</td><td>転置行列（配列）</td></tr></tbody></table></figure>



<ul class="wp-block-list"><li>逆行列が存在するか事前にチェックしたい → <strong>MDETERM</strong></li><li>逆行列を実際に求めたい → <strong>MINVERSE</strong>（事前にMDETERMで確認がおすすめ）</li><li>連立方程式を解きたい → <strong>MINVERSE + MMULT</strong></li><li>行と列を入れ替えたい → <strong>TRANSPOSE</strong></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-mdeterm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MMULT関数の使い方｜行列の積を計算して売上集計や連立方程式を解く</title>
		<link>https://mashukabu.com/excel-function-howto-use-mmult/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-mmult/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 16 Jan 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[MMULT]]></category>
		<category><![CDATA[行列]]></category>
		<category><![CDATA[配列数式]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=3274</guid>

					<description><![CDATA[ExcelのMMULT関数で行列の積を計算する方法を解説。売上集計・重み付き平均・連立方程式など実務3パターンをMINVERSEとの組み合わせ例つきで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「複数商品の価格×数量の合計を店舗ごとに一括で計算したい」「連立方程式をExcelで解きたい」――行列計算が必要な場面で活躍するのが <strong>MMULT関数</strong> です。</p>



<p class="wp-block-paragraph">MMULT関数は2つの配列（行列）の積を計算します。手計算では面倒な行列の掛け算を一瞬で処理でき、MINVERSE・MDETERM関数と組み合わせれば連立方程式も解けます。一見むずかしそうですが、「複数の掛け算の合計を一括で求める」という使い方から始めると、意外と手軽に使えます。</p>



<p class="wp-block-paragraph">「行列という言葉だけで敬遠していた」という方も、この記事で具体的な数式と実例を見れば、自分のシートに取り入れるイメージが持てるはずです。</p>



<p class="wp-block-paragraph">この記事では行列計算の基礎から、スピル対応の使い方、SUMPRODUCT関数との違い、実務での活用例まで丁寧に解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MMULT関数とは？</a><ol><li><a href="#toc2" tabindex="0">読み方と語源</a></li><li><a href="#toc3" tabindex="0">できること</a></li></ol></li><li><a href="#toc4" tabindex="0">MMULT関数の書き方</a><ol><li><a href="#toc5" tabindex="0">基本構文</a></li><li><a href="#toc6" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc7" tabindex="0">基本的な使い方</a><ol><li><a href="#toc8" tabindex="0">例1：1行×N列 と N行×1列 の行列積（内積）</a></li><li><a href="#toc9" tabindex="0">例2：複数店舗×複数商品の売上合計</a></li><li><a href="#toc10" tabindex="0">例3：2×2行列 × 2×2行列</a></li></ol></li><li><a href="#toc11" tabindex="0">スピルとCSE配列数式</a><ol><li><a href="#toc12" tabindex="0">スピル対応（Excel 2019以降・Microsoft 365）</a></li><li><a href="#toc13" tabindex="0">旧CSE配列数式（Excel 2016以前）</a></li></ol></li><li><a href="#toc14" tabindex="0">MINVERSE関数との組み合わせ：連立方程式を解く</a><ol><li><a href="#toc15" tabindex="0">連立方程式 AX = B の解法</a></li><li><a href="#toc16" tabindex="0">MDETERM関数で事前チェック</a></li></ol></li><li><a href="#toc17" tabindex="0">MDETERM・MINVERSEとの使い分け</a></li><li><a href="#toc18" tabindex="0">TRANSPOSE関数との組み合わせ</a></li><li><a href="#toc19" tabindex="0">SUMPRODUCT関数との違い</a></li><li><a href="#toc20" tabindex="0">重み付き平均への応用</a><ol><li><a href="#toc21" tabindex="0">人事評価への応用</a></li></ol></li><li><a href="#toc22" tabindex="0">構造化テーブルでMMULTを自動拡張する</a><ol><li><a href="#toc23" tabindex="0">スピル参照（#）との合わせ技</a></li></ol></li><li><a href="#toc24" tabindex="0">在庫評価・原価計算への応用</a><ol><li><a href="#toc25" tabindex="0">倉庫別の在庫評価額を一括計算する</a></li><li><a href="#toc26" tabindex="0">月別売上を時系列でまとめて出す</a></li><li><a href="#toc27" tabindex="0">期間×単価変動を組み合わせるときの注意</a></li></ol></li><li><a href="#toc28" tabindex="0">よくある疑問（FAQ）</a><ol><li><a href="#toc29" tabindex="0">Q. MMULT関数はExcelのどのバージョンから使えますか？</a></li><li><a href="#toc30" tabindex="0">Q. 配列定数でもMMULTは使えますか？</a></li><li><a href="#toc31" tabindex="0">Q. 行列が正方形でなくてもMMULTは使えますか？</a></li></ol></li><li><a href="#toc32" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc33" tabindex="0">#VALUE!が出たときの確認手順</a></li></ol></li><li><a href="#toc34" tabindex="0">最小二乗法（線形回帰）への応用</a></li><li><a href="#toc35" tabindex="0">SEQUENCE関数で単位行列を作成・逆行列を検証する</a></li><li><a href="#toc36" tabindex="0">BYROW・MAKEARRAY との組み合わせ（Microsoft 365 専用）</a></li><li><a href="#toc37" tabindex="0">FILTER 関数と組み合わせた条件付き行列計算（Microsoft 365）</a></li><li><a href="#toc38" tabindex="0">Power Query / Power Pivot とMMULTの使い分け</a><ol><li><a href="#toc39" tabindex="0">判断のものさし</a></li><li><a href="#toc40" tabindex="0">MMULTからPower Queryに移すサイン</a></li></ol></li><li><a href="#toc41" tabindex="0">まとめ</a></li><li><a href="#toc42" tabindex="0">注意事項と使い上のポイント</a><ol><li><a href="#toc43" tabindex="0">大きな行列では処理速度に注意</a></li><li><a href="#toc44" tabindex="0">数式を保護する場合はセルのロックを活用する</a></li><li><a href="#toc45" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MMULT関数とは？</span></h2>



<h3 class="wp-block-heading"><span id="toc2">読み方と語源</span></h3>



<p class="wp-block-paragraph">「エム マルト」と読みます。「Matrix Multiplication（行列乗算）」の略で、2つの行列を掛け合わせる関数です。</p>



<h3 class="wp-block-heading"><span id="toc3">できること</span></h3>



<p class="wp-block-paragraph">2つの行列（配列）の <strong>行列積</strong> を計算し、新しい行列を返します。</p>



<ul class="wp-block-list"><li>複数商品×複数店舗の売上を一括計算する</li><li>連立方程式をMINVERSEと組み合わせて解く</li><li>重み付き平均・加重スコアを一括算出する</li></ul>



<p class="wp-block-paragraph"><strong>行列積の条件</strong>：</p>



<ul class="wp-block-list"><li>配列1の <strong>列数</strong> と 配列2の <strong>行数</strong> が一致している必要があります</li><li><code>(m×n) × (n×p) = (m×p)</code> の形で計算されます</li></ul>



<p class="wp-block-paragraph">つまり「左の行列の横のサイズ」と「右の行列の縦のサイズ」が同じでなければいけません。この条件を確認してから数式を組む習慣をつけると、エラーを防ぎやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc4">MMULT関数の書き方</span></h2>



<h3 class="wp-block-heading"><span id="toc5">基本構文</span></h3>



<pre class="wp-block-code"><code>=MMULT( 配列1, 配列2 )</code></pre>



<h3 class="wp-block-heading"><span id="toc6">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>配列1</td><td>必須</td><td>掛け合わせる1つ目の行列（セル範囲または配列定数）</td></tr><tr><td>配列2</td><td>必須</td><td>掛け合わせる2つ目の行列（配列1の列数 = 配列2の行数であること）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>注意点</strong>：</p>



<ul class="wp-block-list"><li>配列に文字列・論理値・空白が含まれていると <code>#VALUE!</code> エラー</li><li>配列1の列数と配列2の行数が一致しないと <code>#VALUE!</code> エラー</li><li>結果は複数セルに展開されるため、スピル（自動展開）が動作します</li></ul>



<h2 class="wp-block-heading"><span id="toc7">基本的な使い方</span></h2>



<h3 class="wp-block-heading"><span id="toc8">例1：1行×N列 と N行×1列 の行列積（内積）</span></h3>



<p class="wp-block-paragraph">3種類の商品の単価が1行に、売上数量が1列にある場合：</p>



<p class="wp-block-paragraph"><strong>単価（B2:D2）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品A</th><th>商品B</th><th>商品C</th></tr></thead><tbody><tr><td>500</td><td>800</td><td>1200</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>数量（F2:F4）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>数量</th></tr></thead><tbody><tr><td>10</td></tr><tr><td>5</td></tr><tr><td>3</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=MMULT(B2:D2, F2:F4)</code></pre>



<p class="wp-block-paragraph">結果：<code>500×10 + 800×5 + 1200×3 = 14600</code></p>



<p class="wp-block-paragraph">SUMPRODUCT関数と同じ計算ですが、行列の形式でまとめて処理できます。</p>



<h3 class="wp-block-heading"><span id="toc9">例2：複数店舗×複数商品の売上合計</span></h3>



<p class="wp-block-paragraph">3商品×3店舗のデータがある場合、1回のMMULTで各店舗の売上合計を一括計算できます。</p>



<p class="wp-block-paragraph"><strong>単価（B1:D1）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品A</th><th>商品B</th><th>商品C</th></tr></thead><tbody><tr><td>500</td><td>800</td><td>1200</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>各店舗の販売数量（B2:D4）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品A</th><th>商品B</th><th>商品C</th><th>店舗</th></tr></thead><tbody><tr><td>10</td><td>5</td><td>3</td><td>店舗A</td></tr><tr><td>8</td><td>6</td><td>4</td><td>店舗B</td></tr><tr><td>12</td><td>3</td><td>2</td><td>店舗C</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=MMULT(B2:D4, TRANSPOSE(B1:D1))</code></pre>



<p class="wp-block-paragraph">各行（店舗）の売上合計が一列で返されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>店舗</th><th>売上合計</th></tr></thead><tbody><tr><td>店舗A</td><td>500×10+800×5+1200×3 = 14,600</td></tr><tr><td>店舗B</td><td>500×8+800×6+1200×4 = 13,600</td></tr><tr><td>店舗C</td><td>500×12+800×3+1200×2 = 11,400</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">TRANSPOSE関数で単価を1行から1列に変換することで、行列の次元が合います（3×3 × 3×1 = 3×1）。</p>



<h3 class="wp-block-heading"><span id="toc10">例3：2×2行列 × 2×2行列</span></h3>



<p class="wp-block-paragraph">A1:B2に2×2行列、D1:E2に別の2×2行列がある場合：</p>



<pre class="wp-block-code"><code>=MMULT(A1:B2, D1:E2)</code></pre>



<p class="wp-block-paragraph">結果として2×2の行列がスピルで展開されます。</p>



<h2 class="wp-block-heading"><span id="toc11">スピルとCSE配列数式</span></h2>



<h3 class="wp-block-heading"><span id="toc12">スピル対応（Excel 2019以降・Microsoft 365）</span></h3>



<p class="wp-block-paragraph">Excel 2019・Microsoft 365では、MMULTの結果は <strong>スピル</strong>（自動展開）されます。結果の左上セルに数式を1つ入力するだけで、必要な範囲に自動的に展開されます。</p>



<pre class="wp-block-code"><code>C1: =MMULT(A1:B2, D1:E2)   ← C1だけに入力。結果がC1:D2に展開される</code></pre>



<p class="wp-block-paragraph">スピルが展開される範囲（「スピル範囲」）に既存のデータがあると、スピルエラー（#SPILL!）が発生します。展開先のセルを空にしてから数式を入力してください。</p>



<h3 class="wp-block-heading"><span id="toc13">旧CSE配列数式（Excel 2016以前）</span></h3>



<p class="wp-block-paragraph">旧バージョンのExcelでは、<code>Ctrl+Shift+Enter</code> で確定する <strong>CSE配列数式</strong> として入力する必要がありました。</p>



<pre class="wp-block-code"><code>{=MMULT(A1:B2, D1:E2)}   ← {} は Ctrl+Shift+Enter で入力</code></pre>



<p class="wp-block-paragraph">現行のExcelでは通常のEnterで入力できます。古いファイルにCSE形式があった場合も、通常の数式として書き直せます。</p>



<h2 class="wp-block-heading"><span id="toc14">MINVERSE関数との組み合わせ：連立方程式を解く</span></h2>



<p class="wp-block-paragraph">MMULT関数の最も強力な応用が、MINVERSE（逆行列）との組み合わせによる <strong>連立方程式の解法</strong> です。</p>



<h3 class="wp-block-heading"><span id="toc15">連立方程式 AX = B の解法</span></h3>



<p class="wp-block-paragraph"><strong>問題</strong>：次の連立方程式を解く</p>



<pre class="wp-block-code"><code>2x + y = 8
x + 3y = 9</code></pre>



<p class="wp-block-paragraph"><strong>手順</strong></p>



<ol class="wp-block-list"><li>係数行列A（B1:C2）に以下を入力する</li></ol>



<figure class="wp-block-table"><table><thead><tr><th>列B</th><th>列C</th></tr></thead><tbody><tr><td>2</td><td>1</td></tr><tr><td>1</td><td>3</td></tr></tbody></table></figure>



<ol class="wp-block-list"><li>右辺ベクトルB（E1:E2）に以下を入力する</li></ol>



<figure class="wp-block-table"><table><thead><tr><th>列E</th></tr></thead><tbody><tr><td>8</td></tr><tr><td>9</td></tr></tbody></table></figure>



<ol class="wp-block-list"><li>解の数式を入力する</li></ol>



<pre class="wp-block-code"><code>=MMULT(MINVERSE(B1:C2), E1:E2)</code></pre>



<p class="wp-block-paragraph">結果：x=3, y=2 がスピルで返されます。</p>



<p class="wp-block-paragraph">連立方程式の数が増えても、行列の範囲を広げるだけで同じ数式のパターンで対応できます。ただしMINVERSEを使う前に、係数行列の行列式が0でないことを確認しておくと安心です。</p>



<p class="wp-block-paragraph"><strong>3変数の連立方程式の例（パターン確認）</strong></p>



<pre class="wp-block-code"><code>2x +  y + z = 9
 x + 3y + z = 12
 x +  y + 4z = 14</code></pre>



<p class="wp-block-paragraph">係数行列A（3×3）と右辺ベクトルB（3×1）を用意して、同じ数式で解けます。</p>



<pre class="wp-block-code"><code>=MMULT(MINVERSE(A), B)    ← 範囲が変わるだけで数式は同じ</code></pre>



<p class="wp-block-paragraph">方程式の数が変わっても数式の形が変わらないのがMMULT+MINVERSEの強みです。財務モデリングや原価計算で変数の多い連立方程式を扱う場面で重宝します。</p>



<h3 class="wp-block-heading"><span id="toc16">MDETERM関数で事前チェック</span></h3>



<pre class="wp-block-code"><code>=MDETERM(B1:C2)</code></pre>



<p class="wp-block-paragraph">この結果が0だと逆行列が存在せず、MINVERSEを使うと#NUM!エラーになります。連立方程式に解が存在しない（または一意に定まらない）サインです。</p>



<h2 class="wp-block-heading"><span id="toc17">MDETERM・MINVERSEとの使い分け</span></h2>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>返すもの</th><th>用途</th></tr></thead><tbody><tr><td>MMULT</td><td>行列積（配列）</td><td>2つの行列を掛け合わせる</td></tr><tr><td>MINVERSE</td><td>逆行列（配列）</td><td>連立方程式の解法でMMULTと組み合わせる</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-mdeterm/">MDETERM</a></td><td>行列式（スカラー）</td><td>逆行列が存在するか確認する（0なら逆行列なし）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3つの関数をセットで覚えておくと、行列計算が必要なシートを一から組み立てるときに迷わなくなります。</p>



<h2 class="wp-block-heading"><span id="toc18">TRANSPOSE関数との組み合わせ</span></h2>



<p class="wp-block-paragraph">行列の転置（行と列の入れ替え）が必要な場合はTRANSPOSE関数を使います。</p>



<pre class="wp-block-code"><code>=MMULT(A1:C3, TRANSPOSE(A1:C3))</code></pre>



<p class="wp-block-paragraph">行ベクトルを列ベクトルに変換してMMULTと組み合わせるパターンが特に多く使われます。</p>



<p class="wp-block-paragraph"><strong>具体的な場面</strong>：</p>



<ul class="wp-block-list"><li>単価が横1行で入力されているのに数量が縦1列の場合、TRANSPOSEで単価を縦に変換してからMMULTに渡す</li><li>データの形式が固定されていてレイアウトを変更できないときに重宝する</li></ul>



<h2 class="wp-block-heading"><span id="toc19">SUMPRODUCT関数との違い</span></h2>



<p class="wp-block-paragraph">「MMULT関数とSUMPRODUCT関数は何が違うのか」と思う方も多いでしょう。簡単に整理すると次のようになります。</p>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>MMULT</th><th>SUMPRODUCT</th></tr></thead><tbody><tr><td>計算の対象</td><td>行列全体</td><td>配列の要素ごとの積の合計</td></tr><tr><td>複数行への一括処理</td><td>得意（全行の結果を一度に返す）</td><td>1条件ずつ個別に書く必要あり</td></tr><tr><td>戻り値の形</td><td>行列（複数セルに展開）</td><td>スカラー（単一値）</td></tr><tr><td>難易度</td><td>やや高い（次元合わせが必要）</td><td>直感的でわかりやすい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「商品ごとの売上を1つだけ求めたい」ならSUMPRODUCTが手軽です。一方「複数店舗や複数期間の結果をまとめて出したい」ならMMULTが圧倒的に効率的です。</p>



<pre class="wp-block-code"><code>' SUMPRODUCT（1店舗の売上だけ求める）
=SUMPRODUCT(B1:D1, B2:D2)

' MMULT（全店舗の売上を一括で求める）
=MMULT(B2:D4, TRANSPOSE(B1:D1))</code></pre>



<p class="wp-block-paragraph">データ規模が大きいほど、MMULTを使う恩恵が大きくなります。</p>



<h2 class="wp-block-heading"><span id="toc20">重み付き平均への応用</span></h2>



<p class="wp-block-paragraph">テストの点数や評価スコアに重みをかけて合計する「重み付き平均」も、MMULTで一括計算できます。</p>



<p class="wp-block-paragraph"><strong>例：3科目のテスト点数と重みから加重合計を計算する</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>科目</th><th>重み（B列）</th><th>生徒A（C列）</th><th>生徒B（D列）</th><th>生徒C（E列）</th></tr></thead><tbody><tr><td>国語</td><td>0.30</td><td>80</td><td>70</td><td>90</td></tr><tr><td>数学</td><td>0.40</td><td>60</td><td>85</td><td>75</td></tr><tr><td>英語</td><td>0.30</td><td>75</td><td>80</td><td>65</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=MMULT(TRANSPOSE(B2:B4), C2:E4)</code></pre>



<p class="wp-block-paragraph">各生徒の加重合計が1行（水平方向）で返されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>生徒A</th><th>生徒B</th><th>生徒C</th></tr></thead><tbody><tr><td>70.5</td><td>79.5</td><td>76.5</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">SUMPRODUCT関数で1人ずつ計算するより、MMULTなら全生徒の結果を1回の数式で出せるので、人数が多いほど効果を発揮します。</p>



<h3 class="wp-block-heading"><span id="toc21">人事評価への応用</span></h3>



<p class="wp-block-paragraph">業績・スキル・行動指針など複数の評価項目に重みをかけて総合スコアを出す場合も同じパターンが使えます。評価対象者が増えても数式を書き直す必要がなく、範囲を広げるだけで対応できます。</p>



<pre class="wp-block-code"><code>評価項目（B2:B4）: 重み0.5, 0.3, 0.2
社員別スコア（C2:E4）: 各社員の評価点
=MMULT(TRANSPOSE(B2:B4), C2:E4)</code></pre>



<p class="wp-block-paragraph">人事部や管理職の方が評価集計シートを作るときに、このパターンを使うと一括更新できてメンテナンスが楽になりますよ。</p>



<h2 class="wp-block-heading"><span id="toc22">構造化テーブルでMMULTを自動拡張する</span></h2>



<p class="wp-block-paragraph">ここまでの例ではセル範囲を <code>B2:D4</code> のように直接書いてきましたが、データ行が増えるたびに数式を直すのは面倒です。Excelの <strong>構造化テーブル</strong>（「ホーム」→「テーブルとして書式設定」、またはCtrl+T）と組み合わせると、行を追加するだけで数式が自動拡張されてくれます。</p>



<p class="wp-block-paragraph">たとえば次のように2つのテーブルを用意します。</p>



<p class="wp-block-paragraph"><strong>テーブル名：単価マスタ（B列：商品ID、C列：単価）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品ID</th><th>単価</th></tr></thead><tbody><tr><td>A001</td><td>500</td></tr><tr><td>A002</td><td>800</td></tr><tr><td>A003</td><td>1200</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>テーブル名：販売実績（B列：店舗、C〜E列：A001 / A002 / A003 の販売数量）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>店舗</th><th>A001</th><th>A002</th><th>A003</th></tr></thead><tbody><tr><td>店舗A</td><td>10</td><td>5</td><td>3</td></tr><tr><td>店舗B</td><td>8</td><td>6</td><td>4</td></tr><tr><td>店舗C</td><td>12</td><td>3</td><td>2</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">各店舗の売上合計は、構造化テーブル参照を使って次のように書けます。</p>



<pre class="wp-block-code"><code>=MMULT(販売実績[[A001]:[A003]], 単価マスタ[単価])</code></pre>



<p class="wp-block-paragraph"><code>販売実績[[A001]:[A003]]</code> で3×3の数量行列、<code>単価マスタ[単価]</code> で3×1の単価ベクトルを表しています。販売実績テーブルに「店舗D」の行を追加すると、MMULTの結果も自動で4行にスピル拡張されます。</p>



<p class="wp-block-paragraph">範囲を直書きする方式と違って、商品が増えたときも <code>[[A001]:[A003]]</code> を <code>[[A001]:[A004]]</code> に伸ばすだけで済むため、メンテナンスがかなり楽になります。複数人で共有するシートでは、構造化テーブル参照をぜひ使ってみてください。</p>



<h3 class="wp-block-heading"><span id="toc23">スピル参照（#）との合わせ技</span></h3>



<p class="wp-block-paragraph">MMULTの結果をさらに別の計算に渡したいときは、スピル参照（数式の入ったセル番地 + <code>#</code>）が便利です。</p>



<pre class="wp-block-code"><code>H2: =MMULT(販売実績[[A001]:[A003]], 単価マスタ[単価])    ← 売上ベクトル
I2: =SUM(H2#)                                       ← 全店舗の総売上
J2: =H2# / SUM(H2#)                                 ← 店舗別の構成比</code></pre>



<p class="wp-block-paragraph"><code>H2#</code> と書くだけで売上ベクトル全体を再利用できます。中間計算用のセルを別途用意せずに済むので、シート全体がすっきりします。</p>



<h2 class="wp-block-heading"><span id="toc24">在庫評価・原価計算への応用</span></h2>



<p class="wp-block-paragraph">MMULT関数は売上集計だけでなく、在庫評価や原価計算でも力を発揮します。基本パターンは <strong>「単価マスタ × 数量行列 = 金額の行列」</strong> という形です。</p>



<h3 class="wp-block-heading"><span id="toc25">倉庫別の在庫評価額を一括計算する</span></h3>



<p class="wp-block-paragraph">商品×倉庫の在庫数量と、商品別の単価マスタがあるとします。</p>



<p class="wp-block-paragraph"><strong>単価マスタ（B2:B4、3×1）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品</th><th>単価</th></tr></thead><tbody><tr><td>商品A</td><td>500</td></tr><tr><td>商品B</td><td>800</td></tr><tr><td>商品C</td><td>1200</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>倉庫別在庫数量（D2:F4、3商品×3倉庫）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>商品</th><th>倉庫1</th><th>倉庫2</th><th>倉庫3</th></tr></thead><tbody><tr><td>商品A</td><td>100</td><td>80</td><td>50</td></tr><tr><td>商品B</td><td>60</td><td>70</td><td>40</td></tr><tr><td>商品C</td><td>30</td><td>20</td><td>25</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">倉庫別の在庫評価額を求めるには、単価ベクトルを転置して掛けます。</p>



<pre class="wp-block-code"><code>=MMULT(TRANSPOSE(B2:B4), D2:F4)</code></pre>



<p class="wp-block-paragraph">1×3 × 3×3 = 1×3 となり、横方向に3倉庫分の在庫評価額がスピルで返ります。倉庫が増えたら数量行列の右に列を足すだけで対応できます。</p>



<h3 class="wp-block-heading"><span id="toc26">月別売上を時系列でまとめて出す</span></h3>



<p class="wp-block-paragraph">時系列の売上集計も同じパターンです。月別販売数量と単価マスタを用意します。</p>



<p class="wp-block-paragraph"><strong>月別販売数量（A2:C7、6か月 × 3商品）</strong></p>



<figure class="wp-block-table"><table><thead><tr><th>月</th><th>商品A</th><th>商品B</th><th>商品C</th></tr></thead><tbody><tr><td>1月</td><td>10</td><td>5</td><td>3</td></tr><tr><td>2月</td><td>12</td><td>4</td><td>4</td></tr><tr><td>3月</td><td>8</td><td>6</td><td>2</td></tr><tr><td>4月</td><td>15</td><td>3</td><td>5</td></tr><tr><td>5月</td><td>11</td><td>5</td><td>3</td></tr><tr><td>6月</td><td>14</td><td>7</td><td>4</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=MMULT(A2:C7, 単価マスタ[単価])</code></pre>



<p class="wp-block-paragraph">6か月分の売上合計が縦方向にスピルします。月次レポートで「先月の数字を入れただけで全体が更新される」状態を作れるので、毎月の集計作業を一気にラクにできますよ。</p>



<h3 class="wp-block-heading"><span id="toc27">期間×単価変動を組み合わせるときの注意</span></h3>



<p class="wp-block-paragraph">商品の単価が月によって変動する場合は、単価表も「商品×月」の2次元になります。同じ「商品×月」の販売数量行列と組み合わせて売上を出したいとき、行列積では次元が合わないため、要素ごとの積を合計するほうが素直です。</p>



<pre class="wp-block-code"><code>=SUMPRODUCT(単価行列, 数量行列)</code></pre>



<p class="wp-block-paragraph">このケースは <a href="https://mashukabu.com/excel-function-howto-use-sumproduct/">SUMPRODUCT関数</a> のほうが直感的に書けます。「次元が合うときはMMULT、要素ごとに対応する単価がある場合はSUMPRODUCT」と覚えておくと迷いません。</p>



<h2 class="wp-block-heading"><span id="toc28">よくある疑問（FAQ）</span></h2>



<h3 class="wp-block-heading"><span id="toc29">Q. MMULT関数はExcelのどのバージョンから使えますか？</span></h3>



<p class="wp-block-paragraph">MMULT関数は旧バージョンのExcelから使える古くからある関数です。Excel 2007、2010、2013、2016でも使えます。スピル（自動展開）はExcel 2019・Microsoft 365からの機能ですが、CSE配列数式（Ctrl+Shift+Enter）でExcel 2016以前でも同等の結果が得られます。</p>



<h3 class="wp-block-heading"><span id="toc30">Q. 配列定数でもMMULTは使えますか？</span></h3>



<p class="wp-block-paragraph">はい。セル範囲だけでなく、<code>{1,2,3;4,5,6}</code> のような配列定数を直接引数に渡すこともできます。</p>



<pre class="wp-block-code"><code>=MMULT({1,2;3,4}, {5,6;7,8})</code></pre>



<p class="wp-block-paragraph">ただし、数式が読みにくくなるためセル範囲を使うほうが管理しやすいです。</p>



<h3 class="wp-block-heading"><span id="toc31">Q. 行列が正方形でなくてもMMULTは使えますか？</span></h3>



<p class="wp-block-paragraph">はい。「配列1の列数 = 配列2の行数」であれば、正方行列（m×m）でなくても使えます。たとえば3×2の行列と2×4の行列は3×4の結果を返します。正方形でないケースのほうが実務では多いので、「列数と行数が合っているか」だけを確認する習慣をつけておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc32">よくあるエラーと対処法</span></h2>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#VALUE!</code></td><td>配列1の列数と配列2の行数が一致しない</td><td>行列の次元を確認する（m×n と n×p の形）</td></tr><tr><td><code>#VALUE!</code></td><td>配列に文字列・論理値・空白が含まれている</td><td>範囲内のセルが全て数値か確認する</td></tr><tr><td><code>#NUM!</code></td><td>MINVERSEで行列式が0の逆行列を計算しようとした</td><td>事前にMDETERM関数で0でないことを確認する</td></tr><tr><td><code>#SPILL!</code></td><td>スピル展開先のセルにデータがある</td><td>展開先の範囲を空にしてから再実行する</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc33">#VALUE!が出たときの確認手順</span></h3>



<ol class="wp-block-list"><li>配列1のサイズ（行数×列数）を確認する（<code>=ROWS(配列1)</code> と <code>=COLUMNS(配列1)</code> を使うと簡単）</li><li>配列2のサイズを確認する（<code>=ROWS(配列2)</code> と <code>=COLUMNS(配列2)</code>）</li><li>配列1の列数 = 配列2の行数になっているか確認する</li><li>範囲内に数値以外が混入していないか確認する（ISNUMBER関数で一括チェックできる）</li></ol>



<pre class="wp-block-code"><code>=SUMPRODUCT(1-ISNUMBER(B2:D4))    → 0なら全て数値、1以上なら非数値が混在</code></pre>



<p class="wp-block-paragraph">このチェック数式で非数値の混入を事前に確認してからMMULTを実行すると、エラーの原因を素早く特定できます。</p>



<h2 class="wp-block-heading"><span id="toc34">最小二乗法（線形回帰）への応用</span></h2>



<p class="wp-block-paragraph">MMULTとMINVERSE・TRANSPOSEを組み合わせると、回帰分析の核である <strong>最小二乗法（OLS）</strong> をExcelの数式だけで実装できます。OLS推定量は β = (X&#8217;X)⁻¹X&#8217;y という行列式で表され、これをそのまま数式に置き換えるだけです。</p>



<p class="wp-block-paragraph">たとえば売上（目的変数 y）を広告費と価格（説明変数）から予測したいとします。設計行列 X は「切片用の1の列・広告費の列・価格の列」の3列で作ります。サンプルが5件なら 5×3 の行列になります。</p>



<figure class="wp-block-table"><table><thead><tr><th>切片</th><th>広告費</th><th>価格</th></tr></thead><tbody><tr><td>1</td><td>50</td><td>300</td></tr><tr><td>1</td><td>80</td><td>280</td></tr><tr><td>1</td><td>60</td><td>310</td></tr><tr><td>1</td><td>100</td><td>260</td></tr><tr><td>1</td><td>70</td><td>290</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">切片の列を必ず先頭に置くのがポイントです。これを忘れると回帰直線が原点を通る前提になり、係数がずれます。設計行列 X を <code>A2:C6</code>、売上 y を <code>E2:E6</code> とすると、回帰係数は次の1本で求まります。</p>



<pre class="wp-block-code"><code>=MMULT(MMULT(MINVERSE(MMULT(TRANSPOSE(X), X)), TRANSPOSE(X)), y)</code></pre>



<p class="wp-block-paragraph">実際の範囲を当てはめると次のようになります。</p>



<pre class="wp-block-code"><code>=MMULT(MMULT(MINVERSE(MMULT(TRANSPOSE(A2:C6), A2:C6)), TRANSPOSE(A2:C6)), E2:E6)</code></pre>



<p class="wp-block-paragraph">結果は3行のスピルで、上から「切片・広告費の係数・価格の係数」が返されます。</p>



<p class="wp-block-paragraph">同じ係数は <a href="https://mashukabu.com/excel-function-howto-use-linest/">LINEST関数</a> でも一発で取得できます。実務で結果だけ欲しいならLINESTが手軽です。一方MMULT版は X&#8217;X（情報行列）やその逆行列といった中間行列を別セルに展開して確認できるため、計算過程を理解したいときや独自にカスタマイズしたいときに向いています。</p>



<pre class="wp-block-code"><code>' 中間行列を確認する例
G1: =MMULT(TRANSPOSE(A2:C6), A2:C6)   ← X'X（3×3）
G5: =MINVERSE(G1#)                    ← (X'X)⁻¹</code></pre>



<p class="wp-block-paragraph">LINESTがブラックボックスなのに対し、MMULT版は各ステップが見える「ガラス張りの回帰」と言えます。</p>



<h2 class="wp-block-heading"><span id="toc35">SEQUENCE関数で単位行列を作成・逆行列を検証する</span></h2>



<p class="wp-block-paragraph">Microsoft 365 の <a href="https://mashukabu.com/excel-function-howto-use-sequence/">SEQUENCE関数</a> を使うと、任意サイズの <strong>単位行列</strong>（対角成分が1、それ以外が0の正方行列）を数式1本で作れます。</p>



<pre class="wp-block-code"><code>=IF(SEQUENCE(n,,1,0)=TRANSPOSE(SEQUENCE(n,,1,0)), 1, 0)</code></pre>



<p class="wp-block-paragraph">縦方向の連番と横方向の連番が一致するセル（=対角線）だけ1になる仕組みです。<code>n</code> に3を入れると次の3×3単位行列がスピルします。</p>



<figure class="wp-block-table"><table><thead><tr><th>1</th><th>0</th><th>0</th></tr></thead><tbody><tr><td>0</td><td>1</td><td>0</td></tr><tr><td>0</td><td>0</td><td>1</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">これはMINVERSEの検証に役立ちます。理論上、行列とその逆行列の積は単位行列になるため、次の数式で逆行列が正しく求まっているか確認できます。</p>



<pre class="wp-block-code"><code>=MMULT(A1:C3, MINVERSE(A1:C3))    ← 単位行列に近づけば逆行列は正常</code></pre>



<p class="wp-block-paragraph">ただし結果は浮動小数点演算のため、対角成分が「0.9999999」、非対角成分が「1.2E-16」のようにわずかな誤差を含むことがあります。完全な0・1にならなくても計算は正常なので、<code>=ROUND(結果, 10)</code> で丸めて確認すると判断しやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc36">BYROW・MAKEARRAY との組み合わせ（Microsoft 365 専用）</span></h2>



<p class="wp-block-paragraph">Microsoft 365 のラムダ系関数 <a href="https://mashukabu.com/excel-function-howto-use-byrow/">BYROW関数</a> や <a href="https://mashukabu.com/excel-function-howto-use-makearray/">MAKEARRAY関数</a> とMMULTを組み合わせると、より柔軟な行列処理が書けます。</p>



<p class="wp-block-paragraph">BYROWは各行に同じ処理を適用する関数です。各行と固定の重みベクトル <code>weights</code>（縦ベクトル）の内積を行ごとに計算するなら、次のように書けます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D10, LAMBDA(row, MMULT(row, weights)))</code></pre>



<p class="wp-block-paragraph">ただしこの計算は <code>=MMULT(B2:D10, weights)</code> という1本のMMULTでも同じ結果が得られ、しかもこちらの方が高速です。BYROWは「行ごとに条件分岐したい」など内積以外の処理を挟むときに価値が出ます。</p>



<p class="wp-block-paragraph">MAKEARRAYは行番号・列番号から要素を生成する関数で、テスト用の行列をその場で作るのに便利です。たとえば数値計算で逆行列が不安定になる例として有名なヒルベルト行列（要素が 1/(r+c-1)）は次のように生成できます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(3, 3, LAMBDA(r,c, 1/(r+c-1)))</code></pre>



<p class="wp-block-paragraph">生成したヒルベルト行列をMMULTやMINVERSEに渡せば、悪条件行列での誤差の出方を手軽に検証できます。</p>



<h2 class="wp-block-heading"><span id="toc37">FILTER 関数と組み合わせた条件付き行列計算（Microsoft 365）</span></h2>



<p class="wp-block-paragraph">Microsoft 365 の <a href="https://mashukabu.com/excel-function-howto-use-filter/">FILTER関数</a> を使うと、条件に合う行だけを抽出してから MMULT に渡すことができます。「特定の部署・商品カテゴリ・期間だけを対象に行列計算したい」というときに役立ちます。</p>



<p class="wp-block-paragraph"><strong>例：特定部署の社員だけ加重評価スコアを算出する</strong></p>



<p class="wp-block-paragraph">A列に部署名、C〜E列に評価スコア（業績・スキル・行動指針）、G2:G4 に縦ベクトルの重み（0.5 / 0.3 / 0.2）が入っているとします。「営業部門だけ」の加重スコアを求めるには次のように書きます。</p>



<pre class="wp-block-code"><code>=MMULT(FILTER(C2:E10, A2:A10=&quot;営業&quot;), G2:G4)</code></pre>



<p class="wp-block-paragraph">FILTER で抽出した「営業部門の社員×3列」の部分行列にそのまま MMULT を掛けるだけで、営業部門の全社員の加重スコアが縦方向にスピルします。部署名を変えれば別部門に即対応でき、対象人数が増えても数式を書き直す必要がありません。</p>



<p class="wp-block-paragraph">対象者が0人のときの <code>#CALC!</code> エラーを防ぎたい場合は IFERROR でラップします。</p>



<pre class="wp-block-code"><code>=IFERROR(MMULT(FILTER(C2:E10, A2:A10=&quot;営業&quot;), G2:G4), &quot;対象者なし&quot;)</code></pre>



<p class="wp-block-paragraph">同じパターンは「特定の商品カテゴリだけ売上集計したい」「選択した期間だけ原価計算したい」など、フィルター後の部分行列に対して行列演算したい場面全般に応用できます。</p>



<h2 class="wp-block-heading"><span id="toc38">Power Query / Power Pivot とMMULTの使い分け</span></h2>



<p class="wp-block-paragraph">データが数千行を超えてくると「MMULTのままでいいのか、Power QueryやPower Pivotに移したほうがいいのか」と迷う場面が出てきます。実務で迷ったときの判断軸を整理しておきます。</p>



<h3 class="wp-block-heading"><span id="toc39">判断のものさし</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>MMULT が向いている</th><th>Power Query / Power Pivot が向いている</th></tr></thead><tbody><tr><td>必要な計算</td><td>行列の積そのもの（連立方程式・回帰係数・加重スコア）</td><td>SUM・AVERAGE・COUNTで分解できるピボット型集計</td></tr><tr><td>データ件数</td><td>数十〜数百行が中心</td><td>数千〜数百万行</td></tr><tr><td>集計の更新頻度</td><td>シートを開いたら即時計算したい</td><td>元データ更新後に「更新ボタン」で取り込む運用でOK</td></tr><tr><td>シートの共有相手</td><td>Excelに慣れた担当者・自分専用</td><td>非エンジニアでも触れるダッシュボードにしたい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「商品×店舗の売上合計を一覧で出すだけ」なら、Power Queryでクエリを作っておいたほうが保守しやすいケースが多いです。一方で「重み付き評価」「連立方程式の解」「最小二乗法の係数」など、行列演算そのものが目的なら、MMULTのままが最速・最短です。</p>



<h3 class="wp-block-heading"><span id="toc40">MMULTからPower Queryに移すサイン</span></h3>



<p class="wp-block-paragraph">次のような兆候が出てきたら、Power Query や Power Pivot への切り替えを検討してみてください。</p>



<ul class="wp-block-list"><li>MMULTを含むシートを開くだけで体感で重い（再計算に数秒以上かかる）</li><li>元データが別ファイル・別システムからの取り込みで、毎回コピペしている</li><li>計算式が10段以上ネストして、誰も触れなくなりつつある</li><li>集計の単位（店舗別・月別・カテゴリ別）を頻繁に切り替えたい</li></ul>



<p class="wp-block-paragraph">逆に、上記が無ければMMULTで戦い続けるほうがメンテも軽く、シート1枚で完結する分かりやすさがあります。「MMULTで限界を感じてから移行する」くらいの感覚でちょうどよいでしょう。</p>



<h2 class="wp-block-heading"><span id="toc41">まとめ</span></h2>



<p class="wp-block-paragraph">MMULT関数のポイントをまとめます。</p>



<ul class="wp-block-list"><li><strong>構文</strong>: <code>=MMULT(配列1, 配列2)</code> で行列の積を計算する</li><li><strong>条件</strong>: 配列1の列数と配列2の行数が一致していること（m×n と n×p の形）</li><li><strong>スピル</strong>: Excel 2019以降はスピルで自動展開。旧Excelで使っていたCSE配列数式（Ctrl+Shift+Enter）からの移行も容易</li><li><strong>連立方程式</strong>: <code>=MMULT(MINVERSE(係数行列), 右辺ベクトル)</code> で解ける</li><li><strong>実務活用</strong>: 複数商品×複数店舗の売上合計、重み付き平均、加重スコア算出などに使える</li><li><strong>エラー</strong>: 次元の不一致と非数値の混入が主な原因</li></ul>



<p class="wp-block-paragraph">MMULT関数は少し数学的な背景が必要ですが、「複数の掛け算の合計を一括で求める」というシンプルな使い方から始めると理解しやすいです。慣れてくると、SUMPRODUCT関数よりもすっきりした数式で複雑な集計を組めるようになりますよ。</p>



<h2 class="wp-block-heading"><span id="toc42">注意事項と使い上のポイント</span></h2>



<h3 class="wp-block-heading"><span id="toc43">大きな行列では処理速度に注意</span></h3>



<p class="wp-block-paragraph">MMULT関数は行列全体を一括計算するため、非常に大きな配列（数百行×数百列）を扱うと計算に時間がかかることがあります。通常の業務データなら問題になりません（数十〜百行程度なら即時計算）が、数千行以上のデータを何十回もMMULTに渡すようなシートでは、揮発性の関数（TODAY、INDIRECT、OFFSETなど）の使用を避けて再計算を最小限に抑えるとパフォーマンスが改善します。</p>



<h3 class="wp-block-heading"><span id="toc44">数式を保護する場合はセルのロックを活用する</span></h3>



<p class="wp-block-paragraph">スピルで展開された結果セルは「スピル参照（#演算子）」でアクセスできます。</p>



<pre class="wp-block-code"><code>=C1#    ← C1にMMULTの数式があれば、スピル全体を参照する</code></pre>



<p class="wp-block-paragraph">スピル展開先のセルを誤って上書きすることを防ぐには、スピル元のセルだけを編集可能にして残りをロックする方法が有効です。シートを他の人と共有する場合に設定しておくと安心です。</p>



<h3 class="wp-block-heading"><span id="toc45">関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-minverse/">MINVERSE関数の使い方｜逆行列を計算する</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-mdeterm/">MDETERM関数の使い方｜行列式を計算する</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-transpose/">TRANSPOSE関数の使い方｜行と列を入れ替える</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-sumproduct/">SUMPRODUCT関数の使い方｜配列の積の合計を求める</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-mmult/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
