• ベストアンサー

配列数式って何ですか??

きのうは、ある列において偶数行だけの合計を求めたいときの計算式を教えてもらいました。 数式は以下のようになるそうです。 {=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} (ありがとうございました。) しかし、そこで出てきた「配列数式」というものが何なのか分かりません。上では{}でくくられた部分だという事はわかるのですが、どうして一番初めと終わりに{}があるのか、たとえば比較として、上において{}がない数式ではどのような計算がされてしまうのでしょうか。 また、{}の位置がSUMの後にあるとき、 =SUM{(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} なんかはどんな計算をしていることになるのでしょうか。 配列数式の計算手順がイメージできないのです。 どなたか教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • coco1
  • ベストアンサー率25% (323/1260)
回答No.1

こんばんは。 配列数式とは、いくつかの要素を持つ式を一つにまとめ、それらの要素一つ一つについて計算をして結果を出す、という機能です。ご存じかと思いますが、式を入力した後、確定するときにSHIFT+CTRL+ENTERとキーを押下します。 従って、手動で{}を入力しても配列数式としては機能しませんから、例示の式はエラーになります。 >{=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} は、 if(mod(row(a1),2)=0,a1,"") if(mod(row(a2),2)=0,a2,"") if(mod(row(a3),2)=0,a3,"") if(mod(row(a4),2)=0,a4,"") if(mod(row(a5),2)=0,a5,"") if(mod(row(a6),2)=0,a6,"") if(mod(row(a7),2)=0,a7,"") if(mod(row(a8),2)=0,a8,"") if(mod(row(a9),2)=0,a9,"") if(mod(row(a10),2)=0,a10,"") という式をまとめて記述したもので、これら全ての式の合計という意味です。 ちなみに、配列数式にせずに=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))を入力するとエラーになります。

meikotk
質問者

お礼

とても分かりやすかったです。ありがとうございました。 質問してよかったです。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2のものです。再度で済みません。#2の中で言った配列A(1),A(2),・・・は一般には、計算が終われば消えます。 ただ行と列を入れ替えるTranspose関数は、配列A(1),A(2),・・・の内容をセルに出せます。こういうタイプもあります。他にもこのタイプは行列関係で存在するが、ご参考までに。 Sumのように加算結果1つが欲しいものと、複数セル値を配列で個々に返さなければならないものとあるわけです。 ------- A1:C3にデータが 人口 計数 東京 12 2 大阪 8 3 E1:G3を範囲指定する。カーソルはE1にあるから、 E1に式=TRANSPOSE(A1:C3)といれてshift+CTRLキーを押しながらENTERキーを押す。すると E1:G3に 0 東京 大阪 人口 12 8 計数 2 3 となります。本日他の質問で、「行と列を入れ替えるには」の 質問で、「形式を選択して貼り付け」操作の回答しか出ていなかったが、この関数式でも出来ます。

meikotk
質問者

お礼

わざわざちがった関数まで紹介して下さいましてありがとうございました。こうやっていろいろ私も勉強できます。感謝しております。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

配列数式{・・(if(B1:B10="仕入",C1:C10,""))・}があるとする。(「・・」の部分の意味は後述。) 配列はプログラムではA(1),A(2),A(3),A(4),A(5), A(6),A(7),A(8),A(9),A(10)と表されますね。 上記配列数式は IF(B1="仕入",C1,"") --->結果--->A(1) IF(B1="仕入",C1,"") --->結果--->A(2) IF(B1="仕入",C1,"") --->結果--->A(3) ・・・・・ IF(B1="仕入",C1,"") --->結果--->A(9) IF(B1="仕入",C1,"") --->結果--->A(10) の10式を示すと考える。ただA(1),A(2)・・・は表上では 見えない。そして 「・・(if(」の「・・」の部分にSumがあると配列数式は Sum(A(1)+A(2)+・・・+A(9)+A(10))の意味になるので、 B1:B10のセルで、Bxセル値が"仕入"なら、Cx列の値を配列A(x)にセットしろとなる。(xは1~10のどれかの値を取る) そのA(1)~A(10)に対しSumをせよ等とかとなる。 結局10個の式をセルに設定しなくても、一箇所のセルの 配列数式で10個の和が求まる。 http://pc21.nikkeibp.co.jp/pc21/pc_10/hr11.htm

meikotk
質問者

お礼

ご丁寧にありがとうございました。だんだん配列数式というものが見えてきました。

関連するQ&A

  • Excelで配列数式を使わずにとびとびの集計をしたいのですが

     ご覧いただきありがとうございます。Excelで、下記のような条件で集計を行いたいと思っています。配列数式を使う方法は考えついたのですが、できれば配列数式を使わず、作業セルもマクロも使わずに普通の関数式で集計したいのです。どなたかおわかりになる方がいらっしゃいましたら、よろしくご教示をお願いいたします。 (条件)  ○4行一組のデータのそれぞれ1行目の数値を足し合わせる。  ○ただし、各組の1行目が空欄の場合は2行目の数値を使う。3行目・4行目は関係なし。  ○データの先頭はA4で、データ数は一定していない。 (考えついた式) {=SUM(IF(MOD(ROW(A4:INDIRECT("A"&ROW()-4)),4)=0,IF(A4:INDIRECT("A"&ROW()-4)>0,A4:INDIRECT("A"&ROW()-4),OFFSET(A4:INDIRECT("A"&ROW()-4),1,0))))}  よろしくお願いいたします。

  • 1行おきのセルの合計数式結果が0になってしまいます。エクセル

    1行おきのセルの合計数式結果が0になってしまいます。エクセル データ範囲がE2からU117あり、E列のE2から1行おきに数値E116までを合計するため E118に次の数式を入力しました。 =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117)) Ctrl+Shift+Enterすると結果が0になってしまいます。 指定の行には数値以外に「-(ハイフン)」や、範囲行に数式が入っていたりするからでしょうか?   E 2   50  ←足したい 3  数式 4   -  ←足したい 5  数式 ・     ・ 117  150  ←足したい 118  数式 119  =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117))

  • 3千行以上あるExcel表の一つの列を配列数式に

    3千全行以上あるExcel表の一つの列を配列数式にしたいです。 {=SUM(IF(A:A="みかん",B:B,))}のようなやつ。 色々試しましたが、配列数式を使わないと出したい値を出せませんでした。 3千行あるのですが、めちゃくちゃ重くなります。 重くならずに済む方法はありますでしょうか。 やはり配列数式を使うとしょうがないのでしょうか。

  • エクセルで数式の結果が正しく表示されない

    エクセルで、奇数行毎と偶数行毎に合計を出したいため、 SUM(IF(MOD(ROW(C2:C53),2)=0,C2:C53,"")) という数式を入れました。 関数ダイアログボックスの左下に出る「数式の結果」では、確かに奇数行だけの合計がでています。 しかし、セルに表示される数字が、C2:C53の合計が出てしまいます>< F9で計算結果を出すと、正しい計算結果がでますが、数式を残しておきたいんです。 なにが間違っているのか、どうすればいいのか、分かる方いらっしゃいましたら教えて下さいOrz ちなみにC2からC53まで、奇数行と偶数行にそれぞれ"合計金額"と"消費税"が入っていて、空欄の行もあります。 数式が入っているのはC54です。

  • 配列数式がうまくいきません

    現在、部品の管理をする為に配列数式をたてて行っています。 集計表にのセルに以下のような式が入っています。 {=SUM(IF($M$10:$M$500=200711,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} M列:客先の希望納期(2007年11月) S列:こちらの納品月(10月、11月) T列:納入数量 今は自分で行っておりますので年が改まった場合などに式(希望納期月)を書き換えておりますが、担当者が変わると配列数式を知らない方が行うこともありえるので、あるセル(A1)を参照する形で式を以下のように変更してみました。 このようにすればA1のセルの部分を変更するだけでいけると考えました。 {=SUM(IF($M$10:$M$500=VALUE(A1)&11,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} しかしながら、この式ではうまく行きません。 この計算式のどこがまずいのでしょうか。 よろしくお願いいたします。

  • 配列数式について

    SUMIF関数は、参照先のブックを閉じると#VALUEになってしまいますよね? そうならない為には配列数式を使用すれば良い、とネットで見たのですが 金額 種別 500 A 200 B 300 B 300 A 例えば上記のような参照先のAの合計金額だけを求める場合、 SUMIF(範囲,検索条件,合計範囲) これを {=SUM(IF(範囲=検索条件,合計範囲)} に直してみると、確かに計算はできたのですが、再度式をクリックしてEnterを押すと 0になってしまいます・・・なぜでしょうか。 わかりにくくてすみません、よろしくお願いします。

  • 配列数式での平均値

    こんにちは。 今、エクセルで配列数式を使って平均値を出す作業をしています。 列Aには男女別を示す1、2が入力されており、 列B以降にはいろいろなデータが入っています。 それらデータにおける男女別の平均値を出したいので 配列数式を使って求めるまでは良かったのですが、 どうやら、列B以降の空欄になっているセルも 0として計算されてしまっているようなのです。 (普通のaverageと同様に)空欄を数に入れないで計算させるには どのようにしたらよいのでしょうか? ちなみに今使っている配列数式は、 {=average(if(A1:A10=1,B:B10,""))} です。

  • googleドキュメントで配列数式を使う場合に

    http://support.google.com/docs/bin/answer.py?hl=ja&answer=71291 こちらのページで説明がされているのですが、CTRL+SHIFT+ENTERで行う配列数式はgoogleドキュメントではARRAYFORMULAを使い、計算するようなのですが IF(COUNTIF(Sheet2!$A$2:$A$444,$E$59)<ROW(Sheet2!B1),"",INDEX(Sheet2!B$2:B$444,SMALL(IF(Sheet2!$A$2:$A$444=$E$59,ROW(Sheet2!$A$1:$A$443)),ROW(Sheet2!B1)))) というちょっと長い数式になると、どこに入れたらいいか分からなくなりました Sheet1に↑の数式が入れてあり、検索したい値はE59セルに Sheet2には取り出したいデータ A列にデータ(検索用)、B列にデータ1、C列にデータ2とあり、 この数式はA列にあてはまるB列のデータ1全てを取り出すものとなっています。

  • 配列数式について

    A     B 2007/9/1  10 2007/9/2  11 ↓ 2007/9/30  9 上記のように入力されています。 9/1~9/5までの金額を集計します。 配列数式を使用してやって見たのですが うまくいきません。よろしくご指導お願いいたします。 {=sum(if(A2:A31>=2007/9/1)*(A2:A31<=2007/9/6),B2:B31))}

  • Mod(row)***

    =SUM(IF(MOD(ROW(A1:A20),4)=MOD(ROW(A3),4),A1:A20)) と、ネットに書いてある通り入力しても0になるか最後に,””を入れた場合、Valueになってしまいます。 理解しようと簡単な数字でやっているのですが計算ができません。 最初はMod、Row関数の意味から調べました。 昔、会社の技師が入力した関数を噛み砕こうとしています。 技師の入力したものは。範囲が200ほどあり、4行ごとの1行目の合計、別に2行目の合計を作成されています。 時々、おかしくなったから直してと言われることがあり、取り急ぎコピペで事なきを得ましたが、 理解したいと思っています。 ただ、実際に入ってる場所で同じ形で同じ関数を入れて作成すると、あるセルはちゃんと計算できるのですが、 あるセルだけは39,248,338分足された値が出てきます。 まったく同じ数式なのでなぜそうなるのかわかりません。 どなたかお詳しい方よろしくお願い致します。

専門家に質問してみよう