• 締切済み

配列数式について

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

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

>確かに計算はできたのですが、再度式をクリックしてEnterを押すと0になってしまいます・・・ 計算結果は0にはなりません。 当方の確認では1300になります。 >なぜでしょうか。 数式バーの中をクリックしてからEnterキーを押すと配列数式ではなくなり、計算結果が変わります。 配列数式として確定するにはShiftとCtrlを押しながらEnterを押します。

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

>SUMIF関数は、参照先のブックを閉じると#VALUEになってしまいますよね? そうならない為には配列数式を使用すれば良い、とネットで見たのですが ーー>SUMIF関数は、参照先のブックを閉じると#VALUEになってしまいますよね ーー>そうならない為には配列数式を使用すれば良い これは正しいだろうか?特に後者は。 配列数式は、関数で複数の値を作って複数の値を返し、それを連続セルに入れる仕組みです。「そうならないため」とは関係ないと思う。 普通のエクセルの関数は返す値は、式を入れたセルだけに、1つ返すのです。 その拡張版です。 参考 配列数式の例を、小生が作ってみよう。 F1:I1に11 23 45 65 があるとする。 Excelの開発の標準モジュールに、私製関数 Function copyrng(v As Range) As Variant Dim rtn(15, 0) i = 0 For Each cl In v rtn(i, 0) = cl i = i + 1 Next copyrng = rtn End Function と作って、シートに戻り、A2:A5を範囲指定して、A2がアクチブになっていて、数式バー部に、=copyrng(F1:I1)と入れて、Shift+Ctrl+Enterの3つのキーを同時押しする。 するとA2:A5には 11 23 45 65 となる。元が横の並びも、縦方向の並びに複写(的)されるが(そのことはさておいて)。 言いたいことは、素人でも、配列数式の関数は作れて、その特徴は、関数でも複数(セル)の値を返してくれる仕組みだ、ということ。 ーーー >{=SUM(IF(範囲=検索条件,合計範囲)}に直してみると これの意味することは、質問者は、先頭・最初と末尾・最後に{と}を、半角文字で入れて、ENTER を入れたのではないでしょうね。 これをやると配列数式としての機能が、崩れてしまいます。 Shift+CTRL+Enterの3つのキーを同時押しする結果、見てくれが、最初に{と最後に}が見えるだけで、キーボードから{と}を入力するのではない、ことをご存じですよね。 よく配列数式の解説の注意事項に書いている。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.4

[No.3]の補足、 参考までに、括弧({ })を使わない配列数式もアルデヨ~ E2: =SUMPRODUCT((B$2:B$5=D2)*(A$2:A$5)) 此れも立派なハイレツスーシキでっす。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

該当セルを選択して、[数式バー]を眺めてぇ~ 数式の前後に付いていた括弧({ })が外れてやしませんか?

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

単にEnterだと(CTRL+SHIFT+Enterじゃないと)配列数式にならない({}が自動で付かない)ので計算が正しく行われません。

関連するQ&A

  • 配列数式について

    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))}

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

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

  • Excelで配列数式を入力できない

    WinXP-SP3,Excel2003です。 配列数式は、例えば任意のセルに、 =SUM( IF( A1:A10="○", B1:B10, )) などと入力し、引き続きCtrl+Shift+Enterで確定するそうですが、Ctrl+Shift+Enterを叩いても何の反応もありません。やり方のどこが間違っているのでしょうか。

  • エクセル関数 Vlookupと配列数式(とsumif)の違い、利点不利点

    以下のような設定でvlookupと配列数式とifを組み合わせた場合の結果が異なる(ことがある?)んですが、原因を教えていただけないでしょうか。あと、配列数式のここが便利!(このvlookupの類似機能に限ったことではない)というものがあれば付随して教えてくださると助かります。 A1:A3 に順に1,2,3と(参照される側の)インデックスが入力されている。 B1:B3 はa,b,cと文字が入力されている C1:C3 には2,2,3と(参照する側の)インデックスが入力されている。 C列のインデックスにより、A列のインデックスに対応するB列の文字列を引いてきたいとき、普通はvlookupで、 <セルD1>=vlookup(C1,A1:B3,2,0)などとすると思います。 これを配列数式を用いて、 <セルD1:D3>= if(C1:C3=A1:A3,B1:B3,0) として同じことをしようとしても、何故かD1セルのみ=0となってしまいます。何故でしょうか?配列数式にそれほどくわしくありませんが、利用価値が非常に高そうなのでわからないことを解明したいのです。 (sumifもタイトルにいれたのは、B1:B3が文字列ではなく数値ならば、同じことをsumifで表現できるから、それだけの理由です) 宜しくお願いします。

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

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

  • 配列数式を用いたエクセルマクロの使い方

    セルA1に「=SUM((A1:A12=5)*(B1:B12=""A"")*C1:C12)」という風に数式を表示形式を文字列として入れておき、他のセルに、この計算結果を入れるたいのですが、マクロでどのようにすればいいか、ご存知のかたがいらっしゃいましたら教えてください。 ちなみに、使用したい数式(セルA1に入れているもの)は配列数式です。

  • 配列数式で行を増やすためには

    シート1の一覧表からシート2の配列数式の入った表へある条件のものを抽出する作業を行っています。 シート2で行を増やそうと思い、配列数式の入ったセルを選択→解除→行を増やす→再度配列数式へ、という作業を行いました。 しかし、#N/Aというエラー表示がでます。シート1の表と指定範囲は変わっていないのにエラー表示はなぜ出るのでしょうか。

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

    現在、部品の管理をする為に配列数式をたてて行っています。 集計表にのセルに以下のような式が入っています。 {=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)))} しかしながら、この式ではうまく行きません。 この計算式のどこがまずいのでしょうか。 よろしくお願いいたします。

  • ある条件を満たした最も近い数値を求める配列数式

    ある条件を満たした最も近い数値を求める配列数式について質問します。 A列には,C列の数値と比較する元になる数値が並んでいます。 B列には,D列の数値と比較する元になる数値が並んでいます。 C列には,A列の数値と比較する対象となる数値が並んでいます。 D列には,B列の数値と比較する対象となる数値が並んでいます。 E列には,計算式が入ります。 すなわち,例えば,E20には, C$1:C20の範囲内の数値で, 右となりにあるD$1:D20の数値が0でなく,かつ,B$1:B20の数値以下である数値の中で, 最もA20の数値に近い数値を求めます。 A  B   C   D  E 1 100  10 89   0   0 2 101 8 90    10    0 3 102 11 92    11   92   4 99 7 77      0   0 5 87 11 68    12   92 6 105   14 100     7   100 7 102 9 78     8   100 8 88 15 102     0    90 9 98 14 99    10    99 10 150 13 78     9   100 11 103  8 79     0   100 12 87 9 68     8   78 13   77   10    70    10   78 14   89   12    71     5   90 15   65   14   102     3   68 16   88   13   105     0   90 17   123  15    98     8   102 18   145  17    99    10   102 19   85    8   100     0   90 20   84    9    87    5    78 一定の条件を満たした配列の合計を計算する関数として,SUMPRODUCT()という便利な関数がありますが, この関数に相当する関数がないので困っています。 MIN関数が配列数式に対応していて,かつ,MIN関数をうまく利用して,最も近い数値を求めることがでるき方法があれば,私の希望が解決できそうなのです。 以上,よろしくアドバイス願います。

  • 配列数式の怪

    お世話になります。 配列数式の入力方法にて解せない部分がありましたのでご教示願います。 ソフトウェア開発の工数見積をしようと思って、Excel2003で添付の様な WBSを作りました。 ここで、機能1~3を実装するか否かをD2~F2に○で指定し、 各機能毎に必要な作業項目をD3~F6でマッピングしました。 ※5は作業対象の工数合計で、 =SUMIF(C3:C6,"○",B3:B6) になっています。 (実際には、機能、作業項目共に数十項目のマトリクスになってます) 各作業項目1~4が見積対象になるかどうかを実装する機能に従って 表示しようと思って、C3~C6に配列数式を使って ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D5:F5="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D6:F6="○"))>0,"○","")} と入力しようと思いましたが、どう入力しても下記の様に行番号を可変に したいところが全て同じ行番号になってしまいます。(D3:F3) ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ここで、例えば※2のD3:F3だけをD4:F4に変えても他の行も全てD4:F4に 変わってしまいます。 いろいろと試行錯誤した結果、一旦全て削除してまっさらな状態から ※1に{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} を入力した後に1行開けて※3にコピーしたところ、無事に D3:F3がD5:F5に変わりました。 そこで、その後に ※2に{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} を入力した後に※4にコピーして目的を達成できました。 (実際には、奇数行、偶数行でそれぞれ数十行ずつのコピーをしました) これは、配列数式入力時の仕様なのでしょうか? また、本来はどの様に入力するのが正解なのでしょうか?

専門家に質問してみよう