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

2024/12/19:MMULT関数【後編】

≪毎週木曜12:15~ZOOMで開催中!Excel関数お勉強会の内容です。》

今回もヘッダーは、ひろ@出石さんに依頼して作成いただきました✨
脳内イメージの素敵具現化、いつもありがとうございます!m(_ _)m

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

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


◇MMULT関数【前編】おさらい(ざっくり)

一番左上のマス➡(1*1)+(10*10)=101 / 一番右下のマス➡(4*3)+(40*40)=1212
  1. 結果の配列サイズは、第1引数の『』数×第2引数の『』数

  2. 第1引数は九九表の左下側(上図黄)・第2引数は右上側(同水色)に入る。

  3. フランス料理の様に各配列外側の行や列➡内側の行や列でペアになって、そのペア同士で掛け算してから、レイヤーっぽく上に重ねて足し算する。(第1引数の列数&第2引数の行数は合わせないと掛け算できなくなる。)

  4. 前回のヘッダー画像のように、立体的なフロアとして考えた時、上図の赤線&青線が床(天井)部分。同じフロア同士で足されることはない。

行列の積・MMULTの多分日本一わかりやすい図解
前回のヘッダー画像(MMULT関数【前編】)&リンク

◇必要な(望む形の)「相方配列」をどう作るか

前編に参加、もしくは記事を読んだ方はお気づきになったかも知れませんが、MMULT関数で曲芸的にデータを整形するときに重要になってくるのは、ずばり『相方配列』。(1ばかりの配列や、階段状になった1の配列など)

この項目では、元データを望む形に整形するために、必要となる相方配列をどうやって用意するかを書きたいと思います。(あくまで華月の場合)

なお相方配列は、どんな方法であっても作れてさえいればOKかと思います。
可能なら発想力を磨いて、数字や配列を組み合わせて作れるといいですね!
ちなみに、毎月月末の木曜日開催の「数字・配列遊び回」は、きっとそういう発想力を磨くのにぴったりだと思いますよ!(*´艸`)‪<宣伝

■行毎の合計配列を作りたい場合

行毎の合

①まずは欲しい配列の形を考えて、元配列が第1・第2配列どちらに入るかを考える。

②相方配列を、どんなサイズ(行数・列数)で用意すればいいかを考える。

③九九表のような枠を用意してみて、相方配列の枠のどこに「1」が入るかを考える。

入るときは1(ON)、入らない時は0(OFF)

■行毎の累計配列を作りたい場合(基本は合計の場合と同じ)

1 / 1+2=3 / 1+2+3=6 / 1+2+3+4=10
5 / 5+6=11 / 5+6+7= 18 / 5+6+7+8= 26
9 / 9+10=19 / 9+10+11= 30 / 9+10+11+12=42

全体的な流れは合計の時と同じだけど・・・
元配列を「第1引数」にいれると、結果配列の行数が3になる →OK
元配列を「第2引数」にいれると、結果配列の列数が4になる →OK
➡ これだけでは、第1・第2どちらにいれるか確定しない・・・

■グループ毎合計を作りたい場合(基本は合計の場合と同じ)

参考画像だけでごめん。

とりあえず、セルに直入力で書いてみる!

◇相方配列が確定したら実際に式に入れていく

MMULT関数の引数に入れる時、いろんな手段があると思います。
パターン1:直入力で書いたセルの範囲を参照で指定する
パターン2:手入力で配列定数を入力する
パターン3:ARRAYTOTEXT関数で配列定数を作り、それを入れる
パターン4:数字や配列からその相方配列を作り、それを入れる

■パターン1:直入力で書いたセルの範囲を参照で指定する

これはそのままですね。
=MMULT( 元配列, 相方配列のセル範囲 )
・・・という感じで。
いうなれば作業列ならぬ、作業範囲みたいな使い方。

■パターン2:手入力で配列定数を入力する

簡単な配列(特に1列や1行)の場合、これでやっちゃうことも多いです。
=MMULT( 元配列, {1;1;1} ) / =MMULT( {1,1,1}, 元配列 )
・・・とかね。
でも範囲の配列となってくると、流石に全部手入力は面倒すぎる…

■パターン3:ARRAYTOTEXTで配列定数を作り、それを入れる

数式で相方配列を作れればよかったけど、うまく作れなかった。
でも、作業範囲は使いたくないから、せめて配列定数で入れておきたい。
・・・とはいえ、手入力は面倒すぎる・・・という時などに。

第2 引数(書式)は、1(TRUE)にしておく。
※ 初期値(0)だと、横一列にカンマで区切られただけのデータになってしまう。

■パターン4:数字や配列からその相方配列を作り、それを入れる≪よく使うのは覚えちゃうのもアリ≫

相方配列を数式でどうやったら作れるか思いつく!これに尽きる!
・・・というのは理想ではあるけども、そんなん全然思いつかない!という人もいる。得手不得手ってのはどうしてもある。人間だもの。

そういう場合は、良く使いがちな配列の作り方だけでも覚えておくといいかもしれない。
ちなみに、覚えておくといっても、こんな感じの形で、何か連番の数字をつかったはず・・・ぐらいの程度。

=SEQUENCE(3,1,1,0) / =SEQUENCE(3)^0
=SEQUENCE(1,3,1,0)  / =SEQUENCE(1,3)^0 
=MUNIT(3)         
=N(SEQUENCE(3)>=SEQUENCE(1,3)) ←上段一番左
=N(SEQUENCE(3)<=SEQUENCE(1,3)) ←下段一番左
※あとは、不等号の向きとか開始数時とかをかえてね!

◇パーツ的MMULT使用例紹介

■数字の並び替え(INDEX関数使って文字の並び替えも!)

相方配列例:=N(SEQUENCE(3,1,0)=ABS(SEQUENCE(1,5,-2)))

■グループ分けした数字の合計をまとめる

相方配列例:=N(QUOTIENT(SEQUENCE(6,1,3),3)=SEQUENCE(1,2))
相方配列例:=N(TRANSPOSE(項目範囲)=UNIQUE(項目範囲,TRUE))
相方配列例:
=IFERROR(FIND(SUBSTITUTE(TRANSPOSE(項目範囲),"手数料",""),{"A1","A2","B1","B2"})^0,0)

■配列数字分の繰り返される1からの連番配列を生成する

▼G248の式(最終的な名前の配列部分)
=LET(名前,B41:B43,元配列,C41:C43,合計,SUM(元配列),行数,ROWS(元配列), ずらし累計,MMULT(N(SEQUENCE(行数)>=SEQUENCE(1,行数)+1),元配列), 検索配列,SEQUENCE(合計,1,0), INDEX(名前,MATCH(検索配列,ずらし累計)))

◇MMULT実務(?)使用例

ピボットテーブルで出すような結果を出すことができる。その1
ピボットテーブルで出すような結果を出すことができる。その2
結合(グループ)毎に割り振った連番を、空白状態となっているセルにも埋める事ができる

◇あとがき

最後に大事なことをいうよ!

完全に理解してから使おうとすると難しいからね!やっぱり何だかんだ。
もっと気楽にとりあえず使ってみちゃえばいいんだよ。
どうせ処理はExcelさんがやってくれるんだし!°˖☆◝(⁰▿⁰)◜☆˖°ヤッタネ!

私だってMMULTドリルを用意してくれた光希桃さんだって、毎回一発で配列を作れてるわけでもなく、「こっちだっけな?あれおかしい。こっちのほうか・・・」と、不等号やSEQUENCEの昇順・降順など、そういう細かいのは一旦とりあえず入れてみてから、後で調整するなんてのもよくある事。
MMULTの第1引数の方に入れるか、第2引数のほうか?ってのも同じく。

みんな大好きVLOOKUPを使い始めた時も、別にみんな完全に理解してからなんて使ってないでしょ?(え、使ってた?・・・アナタ天才ですか?💦)

VLOOKUP完全に理解したテスト
※ 光希桃さん作:自信ある人は是非やってみてね(*´∀`*)

「あんな難しいのを理解してるなんてすごい!」…じゃなくてね…
「そんな程度のてきとうな気軽さで使ってるだけ」です。
たぶんねヽ(゜▽、゜)ノ
後は、使ってればなんとなく感覚的に分かってきて、理解度も上がる。
そんなもんです(๑•̀ㅂ•́)و✧

MMULTに限らず、関数に限らず、Excelに限らずだけども。
何となく食わず嫌いしてる間に、「0➡1にした人」は、そこから少しずつでもどんどん先に進むからね。いつしか気づけば相手はずっと先にいる・・・なんて事もよくあるよね。進んでる側の人になるのか止まっている側か。
ただそれだけのこと(*´∀`*)
<凄い人ってだいたい経験値・経験量がとんでもないよねー・・・

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