---topics:配列数式---

其ノ20 配列数式入門

Excelには配列数式ってのがありまして、どういうものかというと、数式を入力するときに、

 ctrl + shift + enter同時押し
 
 ↓
 
 数式の両端に{}が付いて、配列数式になる

ってヤツなのですが…※1

配列数式の入力の仕方
※1 配列数式の入力の仕方

ま、ちょっと複雑ですし、使いどころも限られてくるのであんまメジャーな知識ではないのですが、一度紹介はしておこうかと思いまして。 習うより慣れよ、と言いますし。
なので、ちょっと、一緒に見ていきましょう。

transpose関数

ハイ、ではまず、例によってダウンロードから。

開くとこんな↓※2になってて、シートが4枚あるんですが。

kiso20_hairetsu.xlsx
※2 kiso20_hairetsu.xlsx

とりあえず、1枚目のシートから順に練習していきましょう。

ではでは。
まず、この表なんですが、タテとヨコを入れ替える、つまり行と列を入れ替えたいですよ※3

行と列を入れ替えたい
※3 行と列を入れ替えたい

行と列を入れ替える関数はtranspose関数といいます。 ちょっと、いっしょにやってみましょう。
まずですね、「行と列を入れ替える」ってことはタテとヨコが入れ替わるわけで、この表は6行×4列なので、4×6の範囲を選択します※4
そう! 右の緑色のスペース、それです!

入れ替え後の範囲を選択
※4 入れ替え後の範囲を選択

なので、F1:K4を選択した状態でまず、「=transpose(」と入力してください※5
「transpose」は「入れ替える」とか、そんな意味です。

4×6のスペースを選択したら、=transpose(と入力
※5 4×6のスペースを選択したら、=transpose(と入力

「(」(はじめのかっこ)まで入力したら、引数として、元の表の範囲を選択します※6
つまり、A1:D6ですね。

元の表範囲を選択
※6 元の表範囲を選択

そうしましたら、「)」(おしりのかっこ)を閉じてやるんだけど…※7
あ! まだenter押さないで!
ただのenterじゃなくて、ctrlshiftを押しながらenter※8
そうすると、式の両端に{ }が付いて、配列数式ということに、なぜかなります。

通常のenter確定ではなくて、ctrl + shift + enter
※7 通常のenter確定ではなくて、ctrl + shift + enter
これが配列数式
※8 これが配列数式

うまく行と列が入れ替わりましたね。
じゃ、次行きましょう。

え? 早い?
いえいえ、今回はまず触ってもらって、そのなかで配列とはどういうものかをつかんでいってもらいたいのです。 なので。

あ、ちなみに、行と列を入れ替えるだけだったらコピー&ペーストでもいけます。
元の表をコピーして、貼り付ける際に「形式を選択して貼り付け」→「行列を入れ替える」とすれば※9。 貼り付け先は1セルのみ選択でOKですよ。 配列数式のときはきちんと4×6の範囲(行列入れ替え後の範囲)を選択しないとダメなんだけど。

形式を選択して貼り付け→行列を入れ替える

※9 形式を選択して貼り付け→行列を入れ替える

正直、行列を入れ替えるだけだったらこちらの方がお手軽なんだけど…、今回は「配列を体験する」ってところに主眼があるので、transpose関数を紹介しました。 ま、どちらもアタマの片隅に入れといてソンはないです。

配列のかけ算

次。
2枚目のシートを見てください※10

2枚目のシート
※10 2枚目のシート

この表の、売価×個数を合計したものがほしいんですよ。 だから、10×12、8×4、10×3、…とやって、その合計を出したい、と。

通常でしたらこの作業、
1.D列に作業列を作って
2.各々をかけ算して
3.その結果をsumで合計する
としますよね※11~13

作業列で売価×個数を計算
※11 作業列で売価×個数を計算
かけ算の結果が出た
※12 かけ算の結果が出た
かけ算の結果をsum
※13 かけ算の結果をsum

でね、これを配列数式でやると、作業列を使わずに一発で出せるんです。
ちょっと、やってみますか。
まず、ふだんsumするときと同じように、=sum(と入れてください※14。 ここまではいつものsum関数と同じです。

=sum(からはじめる
※14 =sum(からはじめる

あたまの「(」かっこまで入れましたら、引数としてまず売価の範囲、すなわちB2:B6を選択します※15。 マウスでガバーっと。

売価の範囲を選択
※15 売価の範囲を選択

B2:B6を選択しましたら、かけ算を示す「*」(アスタリスク、半角)を入れ、次に個数の範囲を選択します※16
そう、C2:C6です。

アスタリスクを使って、売価の範囲×個数の範囲を計算
※16 アスタリスクを使って、売価の範囲×個数の範囲を計算

で、おしりのかっこ「)」を閉じるんだけど、確定するときに例によってctrlshiftenterで確定します※17 ※18。 そうすると、売価×個数を足したものが割り出せます。 一発で。

確定するときはctrl+shift+enter
※17 確定するときはctrl+shift+enter
10×12+8×4+…が計算できる
※18 10×12+8×4+…が計算できる

ハイ、こんな感じ。
ちゃんと数式の両端に{}がついてますね。 ご確認ください。

ちなみに。
この手の「それぞれかけ算して、その結果を足し算」ってこと、経理とか集計とかの仕事でよくあることなんだけど、コイツもやっぱりわざわざ配列数式使わなくてもsumproductって関数でできたりします※19

sumproductでやるならこう
※19 sumproductでやるならこう

sumproduct関数の場合はアスタリスク使いません。 「,」カンマで区切ってやればOKです。
ちなみに、sumproductとはsum-productで、sumは「合計」、productは「積(かけ算の)」という意味です。

…なんか、すぐ配列使わないやり方を紹介しちゃってるのでみなさんも「配列いらないんじゃないか」と思ってしまうかもしれませんが、ま、配列の考え方だけでも一度体験しておくとよいのではないかと思ってこの記事を書いてます。

配列の解説

ハイ、では配列数式を2コ体験したところで、ちょっと解説。
配列って、すごくかんたんに言っちゃうと、「データを範囲ごとまるっとメモリに格納する」ことなんです。
だから、最初のtransposeで言うと、この範囲がまるっとごっそり記憶されます※20

範囲をまるっと
※20 範囲をまるっと

まるっと。 ごっそり。
でね、じゃあそれがどういう効果をもたらすかと言うと、…例えばこの「殿馬」というデータ※21、4行目1列目にあるわけですが、これが行列入れ替わってきちんと1行目4列目に配置されるためには、実は前後のデータとの関係、つまり「山田」や「微笑」のポジションを参照しないと自分をうまく位置づけることができません※22

関係が重要
※21 関係が重要
前後のデータとの関係で自己の位置が決まる
※22 前後のデータとの関係で自己の位置が決まる

つまり、「殿馬」の位置がうまく決まるためには、

(移動前)「山田」の下、「微笑」の上、「17」の左

(移動後)「山田」の、「微笑」の、「17」の

といった具合になっていないといけないわけで、それをするためには、大元の範囲全体への参照が必要となる。 つまり、通常の数式、イコール式とか加減乗除とかleft関数とかのように、「ひとつひとつのセルを」「順番に」参照してるだけではダメなのです。 関係全体に、一挙に! でないと。
こういうときに、範囲全体をまるっと一挙にメモリに格納する「配列数式」が使われるのです。

アレ? ちょっとむずかしくなっちゃった?
…まあ、配列は「範囲全体をまるっと!」ってとこだけ覚えてくれればとりあえずOK。
でね、配列の特徴その2。
配列数式の際には配列となる範囲を指定するのですが、その際配列には0,1,2,…,とインデックス番号が内部的に振られます※23(…たぶん。ぼくもExcelの中身をのぞいたわけではないので確証はないのですが)。
このインデックス番号、内部的に振られるだけで表に出てくるものではないのですが、これがあることで、0は0どおしかけ算、1は1どおしかけ算…、と対応関係を作って計算することが可能となります※24

配列にはインデックス(連番)が振られる
※23 配列にはインデックス(連番)が振られる
同じインデックス番号どおしの対応関係
※24 同じインデックス番号どおしの対応関係

ちょっと実験。
3つ目のシート、「asobi」って名前のヤツを見てください※25

asobi
※25 asobi

おもいっきりズレた表なのですが、コイツにさきほどと同様、sum配列数式を使ってみましょう。
まず、ひとつめの範囲を選択して…※26

ひとつめの範囲を選択
※26 ひとつめの範囲を選択

次に、アスタリスクのあと、ふたつめの範囲を選択して…※27

ふたつめの範囲を選択
※27 ふたつめの範囲を選択

かっこを閉じたら、ctrl+shift+enter※28
すると、先ほどと同じ計算結果が表示されるのですが。

問題なく計算できる
※28 問題なく計算できる

実はここでも、こんなふうに※29インデックス番号が付与されて、で、0は0どおし…、ってかたちで計算されるんですね。

インデックス番号の振られ方
※29 インデックス番号の振られ方

なので、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

配列が3つのパターン
※30 配列が3つのパターン

コイツも、売価×個数×掛率を横方向にかけ算して、その和を出してください。 配列を使って。
ハイ、スタート。

 ・
 ・
…こんな感じになります※31 ※32

こんなふうに範囲を選択し…
※31 こんなふうに範囲を選択し…
かっこを閉じたらctrl+shift+enter
※32 かっこを閉じたらctrl+shift+enter

ハイ、今回はここまで。
正直「配列」って、使わなくてもできちゃうケースがほとんどです。 「作業列を作りたくない」とか特殊な条件がなければ。
ただ、知識としてもっていた方が良いと思いますし、VBAなんかやる場合には活きてくるかもしれないので、ま、とりあえず体験しておく、ってことに損はないと思いますよ。
それでは、シーユーアゲン!

Copyright(C)森田表計算