• ベストアンサー

SUMPRODUCTに3つ以上の条件

A列に男女別、B列に年齢別、C列に住所、D列に部署別のデータが1万人以上、入っています。 1つのセルに、関数で港区、男性、30代の人数のデータを抽出したい。 SUMPRODUCTに条件の2つまでは正しく抽出されるが、3つめの年代別がうまくいきません。 また、そのほかに E-1セルに"男女別"、F-1セルに"年齢"、G-1セルに"住所"、H-1セルに"部署名"、I-1セルに 人数の項目を作成し、E~Hに条件を入れれば、I-1のセルに、人数を出したい場合の作り方を 教えてください。よろしくお願いします。

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

  • ベストアンサー
  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.2

まず、質問者さんはどのように SUMPRODUCT関数を使用しているのでしょう。 条件を  SUMPRODUCT関数の中でかけ算しているか、  パラメータとして渡してSUMPRODUCT関数にかけ算させているか で動作が変わってきます。 ■本題 3つ以上の条件を使う場合は、関数の中でかけ算しないと正しい結果を得られません。 野郎で成人、北海道の総務なら  =SUMPRODUCT((A1:A10="男")*(B1:B10=>"20")*(C1:C10="北海道")*(D1:D10="総務")) こんな感じ。 てか、作り方というか、2つまでの条件式の意味を理解されていないと思うんですよ。 >E-1セルに"男女別"、F-1セルに"年齢"、G-1セルに"住所"、H-1セルに"部署名"、I-1セルに >人数の項目を作成し、E~Hに条件を入れれば、I-1のセルに、人数を出したい場合の作り方を~ 理解されているなら、こんな質問はしませんからねえ。 (質問をするのであれば、自身がどれだけ理解しているかを示さないと  答えを見ても呪文がならんでいるだけにしか受け止めることができませんよ。  それって、目先の問題は解決するけど、ちょっとでも条件が変わると  とたんに難題に変わってしまいます。  本当に問題を解決したいのであれば  >条件の2つまでは正しく抽出されるが~  という書き方はやめておきましょう。  回答者さんが勘違いして回答することがあります。) 悪いことは言いません。 とりあえず、使い方をしっかり 【理解】 して考えてから行動を起こしましょう。  I1=SUMPRODUCT((A1:A10="男")*(B1:B10=>"20")*(C1:C10="北海道")*(D1:D10="総務"))  I1=SUMPRODUCT((A1:A10=E1) * (B1:B10=>F1) * (C1:C10=G1) * (D1:D10=H1))

7MissShots
質問者

お礼

本当に助かりました。関数の使い方を勉強します。

その他の回答 (3)

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

No.3です! 補足の数式 >=SUMPRODUCT(($A$2:$P$10000="男 ")*($G$2:$G10000="東京都港区")*COUNTIF(B2:B1000,">=20")-COUNTIF(B2:B1000,">=30")) については間違いが多すぎます。 基本的にSUMUPRODUCT関数は 列単位で「TRUE」=1 か「FALSE」=0 かを判断し その行ごとの掛け算をプラスしたものになりますので、 数式内の列の行数は合わせてやる必要があります。 すなわち上記数式ですとA列が「男」・G列が「東京都港区」の場合その行は「1」となります。 ところでお考えの数式では SUMPRODUCT関数内にCOUNTIF関数を入れているのでエラーになるか、全く意味のない数式になってしまいます。 おそらく =SUMPRODUCT((A2:A10000="男")*(G2:G10000="東京都港区")*(B2:B10000>=20)*(B2:B10000<30)) といった感じをやりたかったのでしょうか? 今一度、SUMPRODUCT関数の使い方をネットでも検索できるので 確認してみてください。m(_ _)m

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

こんばんは! >3つめの年代別がうまくいきません・・・ とあるのですが、住所に関してはD列データは「港区」が含まれている住所が入っているのではなく、 単に「○○区」のようにH1セルに入力するデータそのものが入っているのでしょうか? そして、F1セルには10・20・30・・・のように10の倍数が入る訳ですよね? そうだとして =SUMPRODUCT((A1:A10000=E1)*(B1:B10000>=F1)*(B1:B10000<F1+10)*(C1:C10000=G1)*(D1:D10000=H1)) ではダメですか? 尚、SUMPRODUCT関数は配列数式になってしまいますので、データが1万以上あるとPCにもかなり負担になると思います。 そこで余計なお世話かもしれませんが、作業用の列を使ってみてはどうでしょう? 作業列としてA列を1列挿入します(元データが右へ1列ずつずれます) データは2行目以降にあるとして、A2セルに =IF(AND(B2=$F$1,C2>=$G$1,C2<$G$1+10,D2=$H$1,E2=$I$1),1,"") という数式を入れ、A2セルのフィルハンドルでダブルクリック! 結果のJ1セルには単に =SUM(A:A) としておきます。 もう一つ余計なお世話かもしれませんが、D列住所が「東京都港区・・・」のようになっている場合は A2セルの数式を =IF(AND(B2=$F$1,C2>=$G$1,C2<$G$1+10,COUNTIF(D2,"*"&$H$1&"*"),E2=$I$1),1,"") にします。 参考になりますかね? 長々と失礼しました。m(_ _)m

7MissShots
質問者

補足

質問が良くなかったようで済みません。 まず、下記のように作成しましたが、3つめの年代別の20代をCOUNTIFを入れましたがだめでした。 =SUMPRODUCT(($A$2:$P$10000="男 ")*($G$2:$G10000="東京都港区")*COUNTIF(B2:B1000,">=20")-COUNTIF(B2:B1000,">=30"))

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

> SUMPRODUCTに条件の2つまでは正しく抽出されるが、3つめの年代別がうまくいきません。 今現在、どういう関数を記述しているのかを書いた方が早いと思うが…。 (「うまくいきません。」だけで理解できる人はいません。)

7MissShots
質問者

お礼

言われてみればそうでした。失礼しました。

関連するQ&A

  • SUMPRODUCT関数について

    excel2010 SUMPRODUCT関数で、式の内容が理解できず教えてください。 sheet1に、A22からAM1047までデータがあります。B,E列を参照し、 sheet2のA、Cに設定された内容で抽出するという内容になっています。 具体例を下記に示します。 sheet1の構成 A1~AM21までは題目が記載されています。抽出したいデータ対象ではありません。 A列は見出しの内容でほとんど空欄です。 A427セルに本体、以降空欄が続きA490セルにヘッド、また空欄が続きA544セルに 見出しの内容といった感じです。 B22~B30セルにX001という識別コード(同じものが9) B30~B39セルにX002という識別コード(同じものが9) 以降、識別コードがB1047セルまで入ります。 E22~E30までは、a,b,c,d,e,f,g,h,iという検索内容が入ります。 以降同じ検索内容が続きます。 H22~H1047まで数字のデータが入ります。 上記以外の列は無関係なので説明省略。 下記のイメージです。 A1からAM20までにも何かしら内容が入っていますが、関係ないので説明省略。 A21の様に記載しているのはセルアドレス、その直下は入っている内容です。 A21  B21   E21     H21 名称  コード  検索     3月2日 A22  B22   E22     H22 準備  X001   a      0     X001   b      3     X001   c      2     X001   d      5     X001   e      2     X001   f      0     X001   g      3     X001   h      0     X001   i      0     X002   a      4     X002   b      7     X002   c      0     X002   d      0     X002   e      1     X002   f      3     X002   g      0     X002   h      0     X002   i      3  … A427  B427  E427    H427 本体  X701   a      0     X701   b      0     X701   c      1     X701   d      0     X701   e      2     X701   f      3     X701   g      0     X701   h      0     X701   i      1 … A490 ヘッド X792   a      4     X792   b      7     X792   c      2     X792   d      0     X792   e      1     X792   f      3     X792   g      0     X792   h      0     X792   i      3 sheet2は A1     C1  D1 コード   検索 X001    c   2 X002    c   0 X003    c   0 X004    c   0 X005    c   0 X006    c   0 X007    c   0 X008    c   0 X009    c   0 … X701    c   1 X792    c   2 の様にコードと検索条件でD列にsheet1からデータをひっぱってきたいのです。 下記はsheet2のD27セルに設定した内容です。 =IF(SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)), INDEX(Sheet1!H$22:H$1047,SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)*(ROW(sheet1!$A$1:$A$1026)))),"-") webや過去のokwebのsumproduct関数について調べた上で上記式にたどり着き、この内容で、sheet1の内容をひっぱってくるので良いのですが、 最後の*(ROW(sheet1!$A$1:$A$1026))の部分が理解できません。 疑問の内容は、下記2点 (1)単独でROW(sheet1!$A$1:$A$1026)を実施すると1になります。 しかしながら、 =IF(SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)), INDEX(Sheet1!H$22:H$1047,SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)*1)),"-") としてフィルハンドコピーすると、全ての行が27行目の値になってしまいます。 何故1ではだめなのでしょう? (2)データの範囲はA22からAM1047なので範囲を下記の様に同じにしてみました。 *(ROW(sheet1!$A$1:$A$1026))→*(ROW(sheet1!$A$22:$A$1047)) とすると全く正しく抽出されません。0になってしまいます。 *(ROW(sheet1!$A$1:$A$1026))が*(ROW(sheet1!$A$1:$A$1025)) の様に設定すると#N/Aとなり、抽出する設定条件で必要なのですが、 この*(ROW(sheet1!$A$1:$A$1026))の意味を教えていただきたく。

  • SUMPRODUCTについて

    A~Dのデータがすべて一致したらE列を合計する関数をつくりました。 C列にはVLOOKUP関数が入っており、合計のE列にもただの足し算が入っております(#N/Aと出てるデータもあります)。 別シートに =SUMPRODUCT((マスター!A2:A100="10A")*(マスター!B2:B100="H")*(マスター!C2:C100="A5")*(マスター!D2:D100=8)*マスター!E2:E100) と入れたら#N/Aと出ます。 条件範囲のエラー値をどうにかしなければだめなのでしょうか? それとも根本的に数式が間違ってるのでしょうか? よろしくお願いいたします。

  • 【SUMPRODUCT】について

    下記リストと条件で価格を算出したいのですが、A列の「7」以外の数字まで反映された値がかえってきてしまいました。適切な関数を使用しているかも不明です。 アドバイスのほどお願いいたしますm( _ _)m --------------------------------------------------------------- セル A列 B列 C列 D列 E列 1 5 A リンゴ店 TEL \100 2 5 B ミカン店 FAX \200 3 7 C リンゴ店 TEL \100 4 7 A ミカン店 FAX \200 5 7 B リンゴ店 TEL \100 6 7 C ミカン店 FAX \200 --------------------------------------------------------------- <条件> A列 「7」 B列 「B」と「C」 C列 「ミカン」を含む D列 「FAX」以外 <作成した数式>(かえってきた値は上の条件とは相反したデータで、恐らくA列の「7」以外の数字も含んでいるようです・・) =SUMPRODUCT((A$2:A$10=7)*(B$2:B$10="B")*(B$2:B$10="C")*(E$1:E$10)) +SUMPRODUCT((A$2:A$10=7)*ISNUMBER(FIND("ミカン",C$1*C$10))*(E$1:E$10))+SUMPRODUCT((A$2:A$10=7)*ISERROR(FIND("FAX",D$1:D$10))*(E$1:E$10)) 以上、質問が長くなってしまい申し訳ありません。 ご教授のほどどうぞ宜しくお願いいたします。

  • SUMPRODUCTでエラーになってしまいます。

    関数を少しづつ勉強しながら集計表作成の業務を同時進行しています。 初心者です。 今作ってるのは複数条件の合計金額を求めたくて、 SUMPRODUCT(('4月'!D4:D38="*"&$C135&"*")*('4月'!$H4:H38=C58)*('4月'!E4:E38)) を作ったのですが、どうやらSUMPRODUCTだと「~を含む」の機能が使えないみたいなので 色々調べて SUMPRODUCT((ISNUMBER(FIND($C$135,'4月!$D$4:$D$38)))*('4月!H4:H38=C61)*('4月!E4:E38)) が完成しました! そして、更に右にコピーするとシートの月も5月、6月・・と変わるようにしたかったので 前回ここで教えてもらった関数を参考に SUMPRODUCT((ISNUMBER(FIND($C$135,INDIRECT(MOD(COLUMN(C1),12)+1&"月!$D$4:$D$38))))*(INDIRECT(MOD(COLUMN(C1),12)+1&"月!H4:H38=C61))*(INDIRECT(MOD(COLUMN(C1),12)+1&"月!E4:E38))) を作りました。 でも・・・エラーになってしまうのです。 セルにエラー表示がされるのではなく正しく直るまで「修正しなさい」って出るバージョンの エラーです。。。。 もう何がいけないのかさっぱりで・・・・・ あと一番上の原型の関数からなのですが、セル番地を列で指定したいのですが、 D:DとかH:Hにするとセルのエラーになってしまいます。 こちらも何でエラーになるのかわからなくて困っています。 どなたか詳しい方教えて下さい。

  • SUMPRODUCT関数で複数条件適用されない

    Sheet1 A列:日付 B列:注文番号 C列:品名 D列:整理番号 E列:数量 集計 A列:品名 B~AF列:日付(1~31日) 【集計】B~AF列の日付、A列の品名が 【Sheet1】A列の日付、C列の品名と一致したら 【Sheet1】E列の数量を【集計】の該当するセルに抽出する 式をSUMPRODUCT関数で作成しました。 例)10/1 りんご 20 【集計】B3セルに以下の数式を入れましたが なぜか数量が「0」のままになります。 =SUMPRODUCT('Sheet1'!$A$3:$A$200='集計'!B$2)*('Sheet1'!$C$3:$C$200="りん ご")*('Sheet1'!$E$3:$E$200) 特に数式のミスはないと思うのですが どうしても正しい値が入りません。 数式に間違いがあればご指摘いただけませんでしょうか。 また、他に良き方法があればご教示いただけるとありがたいです。

  • SUMPRODUCT 複数条件と日付

    関数初心者です。Excel2000を使用しています。 SUMPRODUCT関数を使って複数条件の集計をしたいのですが、どうしても日付の列に反応してくれません。 おそらく原因はデータ元となる日付に時間まで入っているからではないかと思っています。 日付が入力されているセルのデータは 例) 2012/3/3 12:10:50 → セルの書式設定は 時刻のみ 12:10:50 集計したいのは複数条件 例) 2012/3/3 12:10:50 りんご 50  日付 と 商品名 を条件とし 数値 の合計を出したいです。 秒単位で時間計測しているのでこのデータ自体の変更と書式設定の変更は出来ません。 =SUMPRODUCT((B6:B12=B3)*(C6:C12=C3),(D6:D12)) B3のセルに「3/3」もしくは「2012/03/03」の入力で拾えるようにしたくて、 過去のの質問など参考にし(B6:B12=B3)の部分を変更しましたが、うまくいきませんでした。 やってみたことが的外れだったのかもしれません。 また、日付を条件とした場合、書式設定も影響されるのでしょうか? アドバイスをよろしくお願いします。

  • SUMPRODUCTの複数条件設定について

    SUMPRODUCTの複数条件設定について質問です。 以下の式で、以下条件を設定したいのですが、方法が分かりません。 回答の程宜しくお願い致します。 【式】 =SUMPRODUCT(D3:D10000>=C3:C10000) 【やりたい事】 この条件に以下の条件を加えたい。 →D列のセルが空白の場合も  カウントする対象としたい 以上宜しくお願い致します。

  • 複雑な条件のあるデータ抽出の方法

    例えば下記のようなデータから条件に合ったデータのみを 抽出する方法はあるんでしょうか。抽出されたデータは別 シートにて作成するものとします。 社員No  部署No  等級  年齢  給与 001      10    1    21   A 002      11    2    22   B 003      11    1    18   B 004      11    2    22   C 005      10    4    40   E 例えば部署No=11かつ等級=2かつ年齢=22の人数(1)と 給与の平均値(2)を求める式です。 この場合(1)は2、(2)は(B+C)/2となるのですが・・・。 人事評価の参考資料として作成したいと考えています。 お忙しいところ申し訳ありませんが、どなたかご教示 下さい。

  • エクセル SUMPRODUCT関数について教えてください

    エクセルで作成した表から ○○かつ●●のデータ個数を求めたく、 SUMPRODUCT関数を こちらで調べておりましたが どうしても解決しない部分があります。 どうぞ よろしくお願いいたします。 下記8桁数字は、日付です。 カウントしたい数は、B列(終了)が、A1セルに入力された年月かつ、区分(C列)が「A」の数です。 =SUMPRODUCT((LEFT(B2:B100,6)=A1)*(C2:C100="A")) こちらで、『B列=A1セル かつ C列="A"』のみのカウントは出来たのですが、 終了延長(D列)が空欄でない場合は、D列日付データの方をカウントする。 早期終了(E列)が空欄でない場合は、D列・B列よりも E列を優先し、カウントする。という条件を付けたいのですが、 Sheet1 A1セルに「200810(数を調べたい年月を入力)」 (開始)  (終了)     (区分)  (終了延長)  (早期終了)  A列     B列      C列     D列      E列 20061001   20081001   A    -        - 20070926   20081020   A    -        - 20071102   20081009   A    20081201    - 20080101   20081013   B    -        - 20080208   20081010   A    -        20080210 ・・・ この場合、「2」となるようにです。 IF、OR関数あたりかな と考えておりますが、SUMPRODUCT関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

  • 【excel】=SUMPRODUCTの条件の追加

    お世話になります。 図のような割振りを月別に「修正済み」「在庫切れ」「廃盤」と日付、氏名別の個数を出したいです。 日付、氏名別の個数は前回こちらの場でご指導いただき下記で解決できました。 =SUMPRODUCT((E$6:E$5681>=H$4)*(E$6:E$5681<=EOMONTH(H$4,0))*(F$6:F$5681=H6)*1) 今回は、「修正済み」「在庫切れ」「廃盤」で割り振る場合は、どのような条件を追加したらよろしいでしょうか。 度々の質問で恐縮ですが、何とぞご教授の程、よろしくお願いいたします。

専門家に質問してみよう