記事に「#ネタバレ」タグがついています
記事の中で映画、ゲーム、漫画などのネタバレが含まれているかもしれません。気になるかたは注意してお読みください。
見出し画像

2024/12/5:MMULT関数【前編】

≪毎週木曜12:15~ZOOMで開催中!Excel関数お勉強会の内容です。》
今回のヘッダーは、ひろ@出石さんに依頼して(脳内イメージを伝えて)
作成いただきました✨素敵再現ありがとうございます!m(_ _)m

今回&次回はTwitter(現:X)で光希桃さんが作成されたMMULTドリル(※)をベースとした曲芸系MMULT関数の使い方の紹介です。

※↑上記の下線リンクは、初心者さんの1問目としてお勧めのツイートです。
  基本的にはレスに次の問題が出題されています。
※光希桃さんがハッシュタグをつけてくださっているので、
 「#MMULTドリル」で検索できます。
※MMULTドリル視点でいえば、一部ネタバレ(答えバレ)を含む内容となります。あらかじめご承知おきくださいませm(_ _)mゴメン


◇MMULT関数が必要になるタイミング

MMULT関数は、数学で言えば「行列の積」を計算する関数で「線形代数」などにも使われると何とか・・・らしいのですが、そんな滅多に必要にせまられないような計算をする為ではなく、一見(?)曲芸的な使い方をすることで、かゆいところに手が届く便利な使い方ができるという所にあります。

Ver.が365であれば、LAMBDA関数でどうにでもなる事も多いですが・・・
2021以前のVer.で近い内容の事を行おうとした場合や、LAMBDAが利かない「条件付き書式」など、本来LAMBDA的で組むような結果を出したい場合などなど・・・
(※2019以前は、+αでCSEを使わないといけない場合も多くなりますが…)

SUMPRODUCTなどの平面的な配列の処理だけじゃ足りなくなってきて、
次元がもう一段階あれば💦…や、むしろSUMPRODUCTの配列処理の途中段階の配列がほしいんや!!(´;ω;`)…となった時こそが使い時。たぶん。

※ なお個人的にMMULTでの処理は、SUMPRODUCT(365の場合はSUMでも一応可)の延長上にあると思うので、SUMPRODUCTの配列処理を把握していない場合、MMULTの前にSUMPRODUCTの配列処理習得をお奨めします。

◇関数のざっくり紹介

■MMULT関数で出来る事

下記画像の様に、数字データ表を元に行・列ごとの「合計結果の配列」や「条件を満たすセル数のカウント配列」「累計の配列」などを作ることができます。

LAMBDA関数がないExcel2021でもこういう事ができる!

なお、この例はあくまで「今回解説(?)するパターン」なだけで、出来る事の内のほんの一部です!(MMULTドリルの割と早い段階ででてくる内容)
他にも色々結構トリッキーな事が出来たりもするので、また来週の【後半】でもまた一部紹介予定ヾ(・ω・)ノ

■処理内容

MMULT関数に『数字の配列』を2つ入れると、結果を返してくれます。
処理内容としては、「第1引数の1行目×第2引数の1列目」、「第1引数の2行目×第2引数の2列目」「第1引数の3行目×第2引数の3列目」・・・と、それぞれ対応する行と列を掛け算して、それを枠ごとに足す感じ。

同じ行&列の掛け算は、九九の表を思い出してもらって、それぞれを1つのレイヤーとして考え、重なった部分を全部足すイメージ。

結果配列の左上枠でいえば、1+100=101
結果配列の右下枠で言えば、9+900=909

ただ曲芸的な使い方をする場合、この”計算”自体はそんなに関係ないです。
なぜなら、基本的には”相方配列"は 「1」と「0」だけのデータを使うから、
枠に入るか入らないかだけ。(少なくとも初級レベルの段階では)

1を掛ければそのままの数字が入るし、0をかければ全部0・・・。
後項目にある「◇具体的なパーツ的MMULT式例」を見ていただければ、何となくイメージとして認識できるかと思います。

■「引数の配列」と「結果配列」のサイズの関係

曲芸MMULTを扱うにあたり、計算自体はそこまで気にしなくていいものの、
サイズのイメージは把握しておいたほうが使いやすいと思います。
(”すぐに頭には浮かばないけど一応自分で考えられる”という程度でok)
これは恐らく、実際に触ってみると実感として出てくるかと思います。

覚え方としては、MMULT関数の結果配列のサイズは・・・
「行列」という言葉(行が左側にあり、列が右側にある)通り、
左側にある第1引数の「行」数と、右側にある第2引数の「列」数で決まる。

※ 最終的な結果サイズには、第1引数の列数(=第2引数の行数)は関係ない。

◇使用時の注意

■「第1引数の列数」と「第2引数の行数」をあわせる必要がある

先の「処理内容」項目でも書いた通り、「第1引数の●行目」と「第2引数の●行目」を掛け算して、それを枠ごとに足し算しているので、●の部分が常に対になっている(同じ個数存在する)必要があります。
そうしないと、掛ける相手がいなくなっちゃってエラーになります(´・ω・`)

 

■引数には数字のみの配列を入れる必要がある

MMULT関数は、SUM関数(総和)やPRODUCT関数(積)などと同様に、
数学系の演算関数なので、引数には数字をいれないと計算できません。

比較結果など、TRUE/FALSE 配列を元の表として使いたい場合は、N関数に入れたり、( )で括って「×1」したり「+0」したり等して、「1」と「0」に変換しておきましょう。

同様に、エラーや文字列が含まれていてもエラーになります。

◇具体的なパーツ的MMULT式紹介

■行ごと・列ごとの合計を出す

=MMULT(【元の配列】, SEQUENCE(【元の配列の列数】,1,1,0))
=MMULT(SEQUENCE(1,【元の配列の行数】,1,0),【元の配列】)

■行ごと・列ごとに条件を満たすセル数を出す(↑の応用)

=MMULT(N(【元の配列】>=5),SEQUENCE(【元の配列の列数】,1,1,0))
=MMULT(SEQUENCE(1,【元の配列の行数】,1,0),N(【元の配列】>=5))

■行ごと・列ごとの累計を出す

=MMULT(【元の配列】,N(SEQUENCE(【元配列の列数】)<=SEQUENCE(1,【元配列の列数】)))
=MMULT(N(SEQUENCE(【元配列の行数】)>=SEQUENCE(1,【元配列の行数】)),【元の配列】)

◇あとがき

ブログ書くの疲れた・・・
今回は本当に人に教える事の難しさを痛感・・・
ブログ読んでもわからなかったらすみませんm(_ _)m

次回は引き続きMMULT【後半】予定。
※すいません!準備の時間が取れそうにないので12/12(木)は1回休みにして、次回は12/19(木)にします。
実務で使えるような具体的なパターン例や、その他のパーツ的MMULT式例をあと何パターンか紹介しようかなと思っています。

おやすみなさい。zzzZZZ

いいなと思ったら応援しよう!