- ベストアンサー
縦に複数条件がある場合の合計値を効率的に計算する方法
- Excel2003で縦に複数条件がある場合の合計値を求めるには、SUMIF関数を使うしかありませんが、もっと簡素化する方法があります。
- 実際のデータの例を挙げて説明すると、みかんとりんごの個数の合計を求めたい場合、SUMIF関数を複数回使う必要がありますが、SUMPRODUCT関数を使うことで一度の計算で求めることができます。
- 具体的には、SUMPRODUCT関数を使用して、果物がみかんまたはりんごである行の個数を求め、その結果と個数の列を掛け合わせて合計値を算出します。これにより、簡素化された一つの式で合計値を求めることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Excel2007以降でしたら、ANo.1様の仰る様に =SUMPRODUCT(SUMIF(A:A,D2:D3,B:B)) でも大丈夫ですが、Excel2003の場合は、 =SUMPRODUCT(SUMIF(A:A,D2:D3,B:B)*1) という具合に、 *1 が必要になるかも知れません。(私の勘違いでしたら申し訳御座いません) それから、次の様な関数とすれば、D列に入力する条件の数が増えても、関数を書き替える必要がありません。 【条件が98個以下の場合】 =SUMPRODUCT(SUMIF($A:$A,$D$2:$D$99,$B:$B)*1) 【条件の数が定まらない場合】 =SUMPRODUCT(SUMIF($A:$A,$D$1:INDEX($D:$D,MATCH("゛",$D:$D,-1)),$B:$B)*1) 尚、考え難い状況ではありますが、条件の数が数千個以上にもなる場合には、計算処理に要するパソコンの負荷が過大になり、結果が表示されるまでに要する時間が長くなります。 それから、御質問文の下に添付されている画像を拝見した処、E2セルには SUMIF(A:A,D2,B:B) という関数が入力済みの様に思えるのですが、それでしたら、SUMPRODUCT関数を応用した関数や =SUMIF(A:A,D2,B:B)+SUMIF(A:A,D3,B:B) という関数を使わずとも、 =SUM($E:$E) で事足りると思うのですが、如何でしょうか。 因みに、E2以下に入力する関数は、次の様に発展させておいた方が、D2以下のセルに対して、切取り、削除、挿入等の編集を行っても、参照先が出鱈目になりませんので、便利です。 =IF(INDEX($D:$D,ROW())="","",SUMIF($A:$A,INDEX($D:$D,ROW()),$B:$B))
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
>もっと効率のいい関数があれば教えて下さい ない。 +はORの意味で、この質問の場合は、意味的にORを示さないとならないので。 SUMPRODUCT関数でも =SUMPRODUCT(((A1:A5="みかん")+(A1:A5="りんご"))*(B1:B5)) と+を使う。 >あまり「+」は使いたくない 個人的趣味だ。今後エクセルの関数を経験するとき、じっくり勉強してみて。 ーー OR関数を使って作業列を作って =OR(A1="りんご",A1="みかん") =SUMIF(C1:C5,TRUE,B1:B5) なってのも意味ないだろう。 ーー =SUM(IF((A1:A5="りんご")+(A1:A5="みかん"),B1:B5,0)) を配列数式にするのも+を使うし意味無いだろう。
お礼
確かにそうですね。 ありがとうございました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
効率がいいとは、計算速度なのか、オートフィルなのか、数式の短さなのか。。。 >=SUMIF(A:A,D2,B:B)+SUMIF(A:A,D3,B:B) で充分だと思いますが、 =SUMPRODUCT(SUMIF(A:A,D2:D3,B:B)) とすることは可能です。
お礼
SUMPRODUCT(SUMIF(A:A,D2:D3,B:B)) が欲しかった回答です! ありがとうございました。
お礼
とても参考になりました。 *1がなくても大丈夫でした。 ありがとうございました。