• 締切済み

SUMPRODUCT関数で困っています

エクセル2007にて、SUMPRODUCT関数を使ってデータ集計をしたいが 下記の現象で困っています。 SUMPRODUCTの特徴として参照先(sheet1)の指定範囲 「($B$2:$E$6)の範囲を($B$2:$G$20)」を変更すると SUMPRODUCT関数がn/aになり値が表示できない。 (やりたいこと) sheet1に元データが入力されています。    A    B    C    D    E 1 NO 社名 商品 購入日 金額 2 01 A商事 肉 1/3 50円 3 02 B電気 野菜 1/10 70円 4 02 B電気 肉 1/12 50円 5 03 C工業 魚 1/20 60円 6 03 C工業 肉 1/30 50円 sheet2はsheet1より必要なデータを、NOをキーにして、 社名・商品・金額を VLOOKUP関数にて取ってきて表示しています。    A    B    C    D    E 1 NO 社名 商品 金額 2 01 A商事 肉 50円 3 02 B電気 野菜 70円 4 02 B電気 肉 50円 5 03 C工業 魚 60円 6 03 C工業 肉 50円 6 03 C工業 鉄 90円 sheet3はsheet2より必要なデータを、NOをキーにしてSUMPRODUCT関数にて取ってきて表示しています。 次の式をB1に入力しています (=SUMPRODUCT((sheet2!$A$2:$A$6=A2)*(sheet2!$B$2:$B$6=B2<>"鉄")*(sheet2!$D$2:$D$6=D2))    A    B    C    D    E 1 NO 金額 2 01 50円 3 02 120円 4 03 110円 sheet3はsheet2より必要なデータを、NOをキーにしてSUMPRODUCT関数にて取ってきて表示しています。 次の式をB1に入力しています (=SUMPRODUCT((sheet2!$A$2:$A$6=A2)*(sheet2!$B$2:$B$6=B2"鉄")*(sheet2!$D$2:$D$6=D2))    A    B    C    D    E 1 NO 金額 2 03 90円

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

示されているSUMPRODUCT関数は少なくとも次のようにすることでしょう。 =SUMPRODUCT((sheet2!$A$2:$A$6=A2)*(sheet2!$B$2:$B$6=B2<>"鉄")*(sheet2!$D$2:$D$6)) =D2を取った式にすることが必要ですね。

carton
質問者

補足

KURUMITO様 早急なご回答をいただきありがとうございます。 私の記述式が間違っていたのですね。 式を修正して、当月のデータは問題なく出来たのですが 翌月の値が表示できなくなりました。 そこで、追加の質問ですが 翌月の値をsheet1に入力すると、sheet3とsheet4にも上記のように 値が表示するはずですが、両方のシートとも値がn/aとなり表示できません。 当月の値については、問題なく表示できるのですがなぜでしょうか。 式の値をいろいろ直しているのですが、うまくできません。 ----------------------------------------------------------- 次月の集計データをsheet1に入力します。 (sheet1の入力状態)    A    B    C    D    E   1 NO 社名   商品 購入日 金額 2 01 A商事 肉 2/3 50円 3 02 B電気  野菜 2/10 70円 4 02 B電気 肉 2/12 50円 5   03   C工業  魚 2/15 60円 6 03    C工業 肉 2/17 50円 7 03    C工業 鉄 2/20 90円 8 04    D水産 魚 2/25 80円 9 04    D水産 野菜 2/25 90円 sheet2を開いて、sheet1のNOを貼り付ける(A1~A9をコピー)とVLOOKUPにて B1:D9を自動的に表示する。 (sheet2の入力状態) B2=VLOOKUP(A2,sheet1!A2:B2,1,FALSE)    A    B    C    D    E   1 NO 社名   商品 金額 2 01 A商事 肉 50円 3 02 B電気  野菜 70円 4 02 B電気 肉 50円 5   03   C工業  魚 60円 6 03    C工業 肉 50円 7 03    C工業 鉄 90円 8 04    D水産 魚 80円 9 04    D水産 野菜 70円 sheet3を開いて、NOを手入力すると(NO、01・02・03・04)とSUMPRODUCTにて B2:B5を自動的に表示する。 (sheet3の入力状態) B2=SUMPRODUCT((sheet2!$A$2:$A$6=A2)*(sheet2!$B$2:$B$6=B2<>"鉄")*(sheet2!$D$2:$D$6))    A    B    C    D    E   1 NO 金額 2 01 50円 3 02 120円 4   03   110円 5 04    150円 sheet4を開いて、NOを手入力すると(NO、01・02・03・04)とSUMPRODUCTにて B2:B5を自動的に表示する。 (sheet4の入力状態) =SUMPRODUCT((sheet2!$A$2:$A$6=A2)*(sheet2!$B$2:$B$6=B2="鉄")*(sheet2!$D$2:$D$6))    A    B    C    D    E   1 NO 金額 2 01 0円 3 02 90円 4 03 0円 5 04 0円 -----------------------------------------------------------

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

ご質問の状況説明をもう一度ご自分でもよく目を通して、あちこち変なことを口走っている様子を確認してください。 ●同じSheet3で、違うことを集計しようとしている ●Sheet3のD列に何を記入しているのか不明のまま、「D2に等しい」をSUMPRODUCTの計算の条件にしている ●Sheet2で、同じ02や03から違う結果をVLOOKUPできていることになっている ●「次の式をB1に入力しています」は、おそらくきっと、B2に記入していますといいたかったのかもしれない ●シート2のB列は社名なのに、掲示されたSUMPRODUCTの式はB列が商品になっている それで結局何がしたいかというと? 1)「最初のSheet3」には、Noごとの、C列が鉄ではない行について、D列金額の集計をしたい? シート3のA列にNoが記入しておいて B2: =SUMPRODUCT((Sheet2!$A$1:$A$6=A2)*(Sheet2!$C$1:$C$6<>"鉄"), Sheet2!$D$1:$D$6) 2)次のSheet3には、Noごとの、C列が鉄である行について、D列金額の集計をしたい A列にNoを記入しておいて B2: =SUMPRODUCT((Sheet2!$A$1:$A$6=A2)*(Sheet2!$C$1:$C$6="鉄"), Sheet2!$D$1:$D$6)

関連する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))の意味を教えていただきたく。

  • INDEXとSUMPRODUCT関数が分かりません

    INDEXとSUMPRODUCT関数で以下の作業を行おうと思っています。 Sheet2に以下の関数を入れたのですが、どこかがおかしいです。 よろしければ、間違いを教えてください。 Sheet2のB2に入れている関数は =INDEX(Sheet1!$A$2:$A$4,SUMPRODUCT((Sheet1!$B$2:$D$4=A2 )*ROW(Sheet1!$B$2:$D$4))) です。

  • 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関数

    データベース抽出とSUMPRODUCT関数 エクセル2007で以下のような表を作って 関数の勉強をしています。 下の画像の上段のシート(シート1)の表が検索フォームです。 下段のシート(シート2)が購入商品リストです。 シート1のA3セルに請求書NOを入力させることで、 B列からE列までにそれぞれのデータを表示させたいのですが シート2に表示されているように、同じ購入者に複数の 請求書NOが付番されているために、購入者ごとに金額を上手く合計できませんでした。 sumproduct関数も使ってみたのですが、エラーが出てしまいました。 例えばAさんは、請求書が1と2がありますが、請求書は 1枚にしたいので、購入金額を合算して、検索表示したいのです。 加えて、請求書NOと購入商品も下の画像のように 一括にして表示することはできるのでしょうか。 初心者で申し訳ないですが、お願いします。

  • SUMPRODUCT関数について

    http://oshiete1.goo.ne.jp/qa5621207.html で質問していたものですが お答え頂いた関数について質問させて下さい。 =SUMPRODUCT(($A$2:$A$100+($B$2:$B$100>"21:00"*1)=E2)*($C$2:$C$100=F2)) についてなのですが、SUMPRODUCT関数の中で使われる+には どういった意味があるのでしょうか? 前半部分(=E2まで)の意味が分からず、困っております。 どなたか解説をお願いします。

  • SUMPRODUCT関数について

    アンケートの集計をするにあたって、 SUMPRODUCT関数を使いました。 シートが2つあります。 【データ】シート・・・アンケートのデータ A:No. B:データ 1   0 2   1 3   2 4   3 5  空欄が入っている ・ ・ 【集計】シート・・・B列の空欄、1~3の個数を集計する B列に数式 =SUMPRODUCT((データ!$A$4:$A$40000<>"")*(データ!B$4:B$40000=$A4)) を入れました。 A  B 0  2 ・・・・※ 1  1 2  1 3  1 空欄 2・・・・※ 0(ゼロ)と空欄を区別しないで同じと計算してしまいます。 データに、ゼロと空欄が混在している場合、SUMPRODUCTは使えないのでしょうか? この場合、どの数式を使うのがベストでしょうか? 分かりにくくて申し訳ありませんが、 宜しくお願い致します。

  • エクセル 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関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

  • 関数の使い方SUMPRODUCT?DCOUNT?

    エクセルの関数の使い方についてアドバイスをお願いいたします あるシート(仮にSheetAとする)において B列にあるデータの任意の文字(仮にCとする。文字位置は固定ではない)であって、且つ D列にあるデータの任意の文字(仮にEとする。文字位置は固定ではない)の双方を満たすセルの数を数えて、さらにその結果は同じファイルの中にある別のシート(仮にSheetFとする)に表したいと思います これについては関数SUMPRODUCTと関数FINDを使って導きたいと考えておりました。 =SUMPRODUCT(ISNUMBER(FIND("C",B1:B100))*ISNUMBER(FIND("E",D1:D100))) として同じシート上に結果を表すことはできたのですが、別シートに表すところで、 つまづいてしまいました(おそらく初歩的なミスと思うのですが・・・。) 別のシート名を表す部分をどこに入力したらいいのかアドバイスいただきたく お願いいたします それとも別の関数(DCOUNTなど)を使用したほうがよりベストなのか迷っています DCOUNTの使い方も精通しておらず苦慮しております 調べてみましたが前例を見つけだす事ができませんでした 簡単なことでしたらすみません エクセル2003です どうぞアドバイスのほど よろしくお願いいたします

  • SUMPRODUCT関数について

    SUMPRODUCT関数について いつもお世話になっています。 以前こちらでSUMPRODUCT関数を教えていただき大変統計がしやすくなり、 仕事が効率化しました。ありがとうございます。 ところで、SUMPRODUCTだと思うのですが、計算式がうまく組み立てられないのでご質問させていただきます。 A列に部門名、B列に実施日が入力されているエクセルシートがあり、 部門ごとの実施件数を出したいのです。 SUMPRODUCT((A2:A100="○部門")*(CAUNTA(B2:B100))) としてみましたがうまくいきません。 たぶん *(CAUNTA(B2:B100)) の部分がいけないのだろうとは思うのですが、どう変化させればいいのでしょうか? 関数の選択が間違っているのかもしれない、とは思うのですが、適切なものが分かりません。 ご教授お願いします  

  • 【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)) 以上、質問が長くなってしまい申し訳ありません。 ご教授のほどどうぞ宜しくお願いいたします。

専門家に質問してみよう