• ベストアンサー

☆至急☆ 関数/ 集計 

エクセル2003を使用している初心者です。 2つの条件が一致する合計値を集計する関数を教えてください。 SUMIF関数を使用すると思うのですが、検索条件がわかりません・・ よろしくお願いします!

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です! たびたびお邪魔します。 補足を読ませてもらい、もう一度画像をアップしてみます。 Sheet1のデータをSheet2にまとめるようにしてみました。 余計なお世話かもしれませんが、品番と仕入先CDが今後増えても対応できるようにしています。 そのために作業用の列を使っています。 Sheet1の作業列E2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(A1),"") F2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(A1),"") として、E2・F2を範囲指定しF2セルのフィルハンドルで下へずぃ~~~!っとコピーします。 このデータを元にSheet2に品番と仕入先CDを表示させます。 Sheet2のA2セルに =IF(COUNT(Sheet1!$E$2:$E$100)<ROW(A1),"",INDEX(Sheet1!$A$2:$A$100,SMALL(Sheet1!$E$2:$E$100,ROW(A1)))) としてオートフィルで下へコピー 次にSheet2のB1セルに =IF(COUNT(Sheet1!$F$2:$F$100)<COLUMN(A1),"",INDEX(Sheet1!$B$2:$B$100,SMALL(Sheet1!$F$2:$F$100,COLUMN(A1)))) という数式を入れ、列方向(右)にオートフィルでコピー これで品番・仕入先CDが表示されます。 最後にB2セルに =IF(OR($A2="",B$1=""),"",SUMPRODUCT((Sheet1!$A$2:$A$100=$A2)*(Sheet1!$B$2:$B$100=B$1)*(Sheet1!$D$2:$D$100))) として列方向と行方向にコピーすると画像のような感じになります。 合計列のF列は単純に左側のセルを合計してください。 今回も数式はSheet1の100行目まで対応できるようにしています。 尚、Sheet2の品番・仕入先CDがあらかじめ入力してあれば 作業用の列は不要ですし、B2セルに入力した数式のみでOKかと思います。 以上、参考になれば幸いです。 長々と失礼しました。m(__)m

noname#169021
質問者

お礼

tom04 さま いま、実際に関数をコピペしてやってみました。 出来ました!! 昨日の朝から悩み続けていました・・。 画像をアップしていただいたので、とても分かりやすかったです! じっくりと関数を読み解いて、理解したいと思います。 ご親切、ご丁寧で感謝の気持ちで一杯です。(ノ_・。) ありがとうございました^^

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

元のデータを「列:列」で選択 データメニューのピボットテーブルレポートを開始し  品番を 行 に  CDを 列 に  仕入額を データ に それぞれ配置し,「データの個数/仕入額」となっているのをWクリックして集計を合計に変更 品番▼から(空白)のチェックを外して表示除外 CD▼から(空白)のチェックを外して表示除外 以上で,難しい関数を何一つ使わずに集計表を45秒で作成できます。 #しばしばピボットテーブルレポートを「合計してくれる」程度に思っている場合もありますが,本質的にこれの便利な所は関数で苦労しないだけでなく,「品番の一覧」や「CDの一覧」を事前に準備してセルに並べておく必要が無い事,また追加変更削除があっても集計に漏れがない点にあります。

noname#169021
質問者

お礼

keithin さま 何度もご親切にコメントをありがとうございます! ピボットテーブルは、結構使っているのですぐに出来ました^^ その時々で関数と使い分けていきたいと思います。 ありがとうございました!

  • Tofu-Yo
  • ベストアンサー率33% (36/106)
回答No.5

初めて画像を添付しますが…ダイジョウブかな?? 配列関数を使うと、簡単にできます。 元データでは、$B$2:$B$21が品番、$C$2:$C$21が仕入先CD、$D$2:$D$21が仕入額です。 集計表は、F3:F6が品番、G2:I2が仕入先CDです。セルG3に、 =SUM(($B$2:$B$21=$F3)*($C$2:$C$21=G$2)*$D$2:$D$21) と入力して、Ctrl+Shiftを押しながら、Enterを押してみてください。 {=SUM(($B$2:$B$21=$F3)*($C$2:$C$21=G$2)*$D$2:$D$21)} というふうに{}でくくられたはずです。 配列関数を使うときはこのようにするルールです。 意味は、 「(B列がF3(=1)なら1、そうでなきゃ0)×(C列がG2(=A)なら1、そうでなきゃ0)×D列」 を2行目から21行目までに対して行い、全部足す。 となります。あとはコピペで。

noname#169021
質問者

お礼

Tofu-Yo さま ご丁寧なコメントをありがとうございます! Tofu-Yo さまの方法でやってみました。 1つのシートで集計できるのは、便利ですね。 画像をアップしていただいたので、とても分かりやすかったです! 少しづつ、色々な関数を勉強していきたいと思います。 解決できてスッキリしました! ありがとうございました^^

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

回答1の補足です。 回答2でもフォローいただいていますが,回答1と2で同じ関数を使っていても中の細工が少し変えてある点を見逃さないように留意してください。 なお,SUMPRODUCT関数でこの計算をする場合,他の関数では列:列指定出来る物も多いですがSUMPRODUCTでは(2003までは)出来ない点にも気をつけてください。もっとも,2007では一応出来ますが大変計算が遅くなるので,やはり列:列にはしない方が良いのですが。 本題ですが, >2つの条件が一致する合計値 実際には丁寧に,別の列に例えば D2: =A2 & "-" & B2 のようにして2つのデータを1つにまとめておけば条件は「1つ」になるので  =SUMIF(D:D, "あれ" & "-" & "それ", C:C) のようにして素早く簡単に結果を得られ,SUMPRODUCTを使って計算が異常に重たくなるような事態も回避できます。

noname#169021
質問者

お礼

keithin さま 何度もご親切にありがとうございます! SUMIF関数でも、試してみたいと思います。 ありがとうございました。<(_ _*)>

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! すでにNo.1さんがお答えのようにExcel2003ではSUMPRODUCT関数で対応できると思います。 SUMIF関数は条件が一つだけになってしまいます。 実際の表がどのような配置か判らないのでこちらで勝手に↓の画像のように作ってみました。 H2セルに =SUMPRODUCT((A2:A100=F2)*(C2:C100=G2)*(D2:D100)) (エラー処理はしていません) という数式を入れています。 これで、F2・G2セルに条件を入力すればその条件に一致するものの合計が表示されるはずです。 尚、数式は100行目まで対応できるようにしています。 以上、参考になれば幸いです。m(__)m

noname#169021
質問者

補足

はじめまして^^ 早々とご丁寧に教えて下さってありがとうございます! 具体的に集計表を添付しようと思ったのですが、jpeg形式にするのが分からなくて 手間取っていました・・   下記のようにしたいのですが(もしかして、集計というよりも値の抽出ってことかも・・) 説明がうまく出来ずにすみませんでした。 何度も申し訳ありませんが、教えていただけますか。 よろしくお願いいたします。 ◇ 元データ ◇ 品番 仕入先CD 仕入先名  仕入額 1 A 東京 1,000 2 B    大阪 5,000 3 C    名古屋 2,000 4 A    東京 4,500 2 C    名古屋 500 3 B    大阪 10,000   ↓   品番 仕入先CD 合計額   A B C 1  1,000  1,000 2 5,000 500 5,500 3 12,000 12,000 4 4,500 4,500

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

2007からはありますが2003まではないので,代わりに =SUMPRODUCT((A2:A10="あれ")*(B2:B10="これ") , C2:C10 ) などのようにします。 「Excel SUMPRODUCT」で検索すると,多数の使用例をヒットします。

noname#169021
質問者

お礼

超初心者の私に、早々と教えていただきありがとうございました。