其ノ20 配列数式入門
Excelには配列数式ってのがありまして、どういうものかというと、数式を入力するときに、
ctrl + shift + enter同時押し
↓
数式の両端に{}が付いて、配列数式になる
ってヤツなのですが…※1。
ま、ちょっと複雑ですし、使いどころも限られてくるのであんまメジャーな知識ではないのですが、一度紹介はしておこうかと思いまして。
習うより慣れよ、と言いますし。
なので、ちょっと、一緒に見ていきましょう。
transpose関数
ハイ、ではまず、例によってダウンロードから。
開くとこんな↓※2になってて、シートが4枚あるんですが。
とりあえず、1枚目のシートから順に練習していきましょう。
ではでは。
まず、この表なんですが、タテとヨコを入れ替える、つまり行と列を入れ替えたいですよ※3。
行と列を入れ替える関数はtranspose関数といいます。
ちょっと、いっしょにやってみましょう。
まずですね、「行と列を入れ替える」ってことはタテとヨコが入れ替わるわけで、この表は6行×4列なので、4×6の範囲を選択します※4。
そう!
右の緑色のスペース、それです!
なので、F1:K4を選択した状態でまず、「=transpose(」と入力してください※5。
「transpose」は「入れ替える」とか、そんな意味です。
「(」(はじめのかっこ)まで入力したら、引数として、元の表の範囲を選択します※6。
つまり、A1:D6ですね。
そうしましたら、「)」(おしりのかっこ)を閉じてやるんだけど…※7。
あ!
まだenter押さないで!
ただのenterじゃなくて、ctrlとshiftを押しながらenter!※8
そうすると、式の両端に{ }が付いて、配列数式ということに、なぜかなります。
うまく行と列が入れ替わりましたね。
じゃ、次行きましょう。
え?
早い?
いえいえ、今回はまず触ってもらって、そのなかで配列とはどういうものかをつかんでいってもらいたいのです。
なので。
あ、ちなみに、行と列を入れ替えるだけだったらコピー&ペーストでもいけます。
元の表をコピーして、貼り付ける際に「形式を選択して貼り付け」→「行列を入れ替える」とすれば※9。
貼り付け先は1セルのみ選択でOKですよ。
配列数式のときはきちんと4×6の範囲(行列入れ替え後の範囲)を選択しないとダメなんだけど。
正直、行列を入れ替えるだけだったらこちらの方がお手軽なんだけど…、今回は「配列を体験する」ってところに主眼があるので、transpose関数を紹介しました。 ま、どちらもアタマの片隅に入れといてソンはないです。
配列のかけ算
次。
2枚目のシートを見てください※10。
この表の、売価×個数を合計したものがほしいんですよ。
だから、10×12、8×4、10×3、…とやって、その合計を出したい、と。
通常でしたらこの作業、
1.D列に作業列を作って、
2.各々をかけ算して、
3.その結果をsumで合計する、
としますよね※11~13。
でね、これを配列数式でやると、作業列を使わずに一発で出せるんです。
ちょっと、やってみますか。
まず、ふだんsumするときと同じように、=sum(と入れてください※14。
ここまではいつものsum関数と同じです。
あたまの「(」かっこまで入れましたら、引数としてまず売価の範囲、すなわちB2:B6を選択します※15。 マウスでガバーっと。
B2:B6を選択しましたら、かけ算を示す「*」(アスタリスク、半角)を入れ、次に個数の範囲を選択します※16。
そう、C2:C6です。
で、おしりのかっこ「)」を閉じるんだけど、確定するときに例によってctrl+shift+enterで確定します※17 ※18。 そうすると、売価×個数を足したものが割り出せます。 一発で。
ハイ、こんな感じ。
ちゃんと数式の両端に{}がついてますね。
ご確認ください。
ちなみに。
この手の「それぞれかけ算して、その結果を足し算」ってこと、経理とか集計とかの仕事でよくあることなんだけど、コイツもやっぱりわざわざ配列数式使わなくてもsumproductって関数でできたりします※19。
sumproduct関数の場合はアスタリスク使いません。
「,」カンマで区切ってやればOKです。
ちなみに、sumproductとはsum-productで、sumは「合計」、productは「積(かけ算の)」という意味です。
…なんか、すぐ配列使わないやり方を紹介しちゃってるのでみなさんも「配列いらないんじゃないか」と思ってしまうかもしれませんが、ま、配列の考え方だけでも一度体験しておくとよいのではないかと思ってこの記事を書いてます。
配列の解説
ハイ、では配列数式を2コ体験したところで、ちょっと解説。
配列って、すごくかんたんに言っちゃうと、「データを範囲ごとまるっとメモリに格納する」ことなんです。
だから、最初のtransposeで言うと、この範囲がまるっとごっそり記憶されます※20。
まるっと。
ごっそり。
でね、じゃあそれがどういう効果をもたらすかと言うと、…例えばこの「殿馬」というデータ※21、4行目1列目にあるわけですが、これが行列入れ替わってきちんと1行目4列目に配置されるためには、実は前後のデータとの関係、つまり「山田」や「微笑」のポジションを参照しないと自分をうまく位置づけることができません※22。
つまり、「殿馬」の位置がうまく決まるためには、
(移動前)「山田」の下、「微笑」の上、「17」の左
↓
(移動後)「山田」の右、「微笑」の左、「17」の上
といった具合になっていないといけないわけで、それをするためには、大元の範囲全体への参照が必要となる。
つまり、通常の数式、イコール式とか加減乗除とかleft関数とかのように、「ひとつひとつのセルを」「順番に」参照してるだけではダメなのです。
関係全体に、一挙に!
でないと。
こういうときに、範囲全体をまるっと一挙にメモリに格納する「配列数式」が使われるのです。
アレ?
ちょっとむずかしくなっちゃった?
…まあ、配列は「範囲全体をまるっと!」ってとこだけ覚えてくれればとりあえずOK。
でね、配列の特徴その2。
配列数式の際には配列となる範囲を指定するのですが、その際配列には0,1,2,…,とインデックス番号が内部的に振られます※23(…たぶん。ぼくもExcelの中身をのぞいたわけではないので確証はないのですが)。
このインデックス番号、内部的に振られるだけで表に出てくるものではないのですが、これがあることで、0は0どおしかけ算、1は1どおしかけ算…、と対応関係を作って計算することが可能となります※24。
ちょっと実験。
3つ目のシート、「asobi」って名前のヤツを見てください※25。
おもいっきりズレた表なのですが、コイツにさきほどと同様、sum配列数式を使ってみましょう。
まず、ひとつめの範囲を選択して…※26。
次に、アスタリスクのあと、ふたつめの範囲を選択して…※27。
かっこを閉じたら、ctrl+shift+enter※28。
すると、先ほどと同じ計算結果が表示されるのですが。
実はここでも、こんなふうに※29インデックス番号が付与されて、で、0は0どおし…、ってかたちで計算されるんですね。
なので、transpose関数のところで使った岩鬼、山田、殿馬、微笑…の配列にも実はインデックス番号が振られています。 この場合、1行目から0-0,0-1,0-2,…、2行目は1-0,1-1,1-2,…、3行目は2-0,2-1,2-2,…、といった感じで振られます。 だから、位置関係が特定できるわけなんですね。
以上、配列の解説おわり。
上記の話、なんとなくアタマに入れておいてください。
もしかしたら今後、VBAをやるときに活きてくるかもしれませんので。
あ、「今ひとつピンと来なかったなー」って方、大丈夫ですよ。
そこまで火急の用があるわけではないですので。
余裕があれば覚えておく感じで。
配列が3つの場合
最後。
「test3」のシートを見てください※30。
コイツも、売価×個数×掛率を横方向にかけ算して、その和を出してください。
配列を使って。
ハイ、スタート。
・
・
…こんな感じになります※31 ※32。
ハイ、今回はここまで。
正直「配列」って、使わなくてもできちゃうケースがほとんどです。
「作業列を作りたくない」とか特殊な条件がなければ。
ただ、知識としてもっていた方が良いと思いますし、VBAなんかやる場合には活きてくるかもしれないので、ま、とりあえず体験しておく、ってことに損はないと思いますよ。
それでは、シーユーアゲン!