• ベストアンサー

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まで)の意味が分からず、困っております。 どなたか解説をお願いします。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

本来なら2つの条件に合致するセルの個数は「SUMPRODUCT(($A$2:$A$100=E2)*($C$2:$C$100=F2))で求められるのですが、今回のようにB列のデータが21:00よりも大きい場合は翌日扱い、すなわち日付に1を加える必要があります。 この部分の配列数式は普通に書くとなら「IF($B$2:$B$100>"21:00"*1=E2,1,0)」のような数式になりますが、これを簡略化して、かつそのまま配列数式として計算できるように「$B$2:$B$100>"21:00"*1)=E2」としています。 すなわち、上記の数式はB2セルからB100セルの値が21:00よりも大きい場合は、TRUEを返し、それ以外の場合はFALSEを返す配列が得られますが、これを四則演算するとTRUEは「1」FALSEは「0」とみなされて計算されますので、その行のデータのみA列の値に1を加えた値と比較することになるわけです。

wareware7
質問者

お礼

前回に引続きありがとうございます。 分かりやすい解説で、私でも十分理解できました。 感謝です。

その他の回答 (2)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

IF関数の説明部分に誤りがありましたので補足します。 論理式ではなく通常のIF関数で入力する場合の全体の数式は以下のようになります。 =SUMPRODUCT(($A$2:$A$100+IF($B$2:$B$100>"21:00"*1,1,0)=E2)*($C$2:$C$100=F2)) しかし、この数式は配列内にIF関数を使っているので加算した値をそのまま配列として使用できません(正しい値を返しません)。 このような数式の場合は、一般的な配列数式と同様に、数式入力後Ctrl+Shift+Enterで確定する必要があります。

  • passes
  • ベストアンサー率26% (11/42)
回答No.1

21時以降だったら、+1日をしているのですね。

関連するQ&A

  • 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円

  • SUMPRODUCT関数について

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

  • SUMPRODUCTで~を含む検索

    Sheet2   A  B   C 1 1  あい  500 2 1  いう  80 3 0  うえ  120 4 0  いお  200 5 1  えお  350 6 0  あい  260 7 1  えい  90 . . Sheet2が上記のような例で、A1の文字("い")を含むCの合計を A2=SUMIF(Sheet2!B1:B1000,"*"&A1&"*",Sheet2!C1:C1000) で出してたのですが、更にSheet2!A1:A1000が1ならば…という条件を 加える時にはどのようにすればよいのでしょうか? 複数条件になるのでSUMPRODUCT関数を使おうと試みましたがうまくいきませんでした。 http://oshiete1.goo.ne.jp/qa2760300.html で、~から始まると言うのがあったので出来そうな気はするのですが…。

  • 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関数の疑問

     ExcelでSUMPRODUCT関数を条件付きの合計を求めるのによく使っていますが、理解できない動作があります。  仮にA,B,Cが配列、b,cが定数として、A=aかつB=bの場合のCの合計を求めるものとします。 <式1>SUMPRODUCT((A=a)*(B=b)*C)→正しい計算結果 <式2>SUMPRODUCT((A=a)*(B=b),C)→正しい計算結果 <式3>SUMPRODUCT(A=b,B=b,C)→ゼロ <式4>SUMPRODUCT(1*(A=a),1*(B=b),C)→正しい計算結果  3つともすべて同じ計算結果が出てくると思いきや、<式3>だけが何故0になるのかが理解できません。  私は、理由が分からず、腑に落ちないまま<式1>の方法を使っています。  これは仕様上の問題なのか、詳しい理由が分かる方がいれば、解説をよろしくお願いします。  なお、私はExcel2000を使っていますが、Excel2002ではどうなるんでしょうか。

  • SUMPRODUCT関数の使い方

    いつもお世話になっております。SUMPRODUCT関数の使い方が解らず困っています。 どなたか、教えてください。 I列(3~1034)に101と入力されており、F列(3~1034)に○と入力されているセルの数を数えたくて、 SUMPRODUCT関数を使いましたが、答えが0になるか、NAME?になるかで、正答が表示されません。 関数が苦手なので、SUMPRODUCTは、関数の表示ダイアログボックスを使って作成しています。 すると、配列1、配列2、配列3と出てくるので、 配列1に I3:I1034=101 配列2に F3:F1034=○ (絶対参照して)入力すると =SUMPRODUCT($I$3:$I$1034=101,$F$3:$F$1034=○) となり、答えは #NAME? と出てしまいます。 また、やり方が解らないのですが、他の質問の回答をみて、SUMPRODUCT関数を手入力し、 =SUMPRODUCT(($I$3:$I$1034=101)*($F$3:$F$1034=○)) と修正入力すると、答えは 0 になってしまいます。 (だいたい、どうして * が出てくるのかも理屈が解りません。) 101や○を””でくくっても、うまくいきません。 もはや何がどう良くないのかわかりません(泣) どなたか、素人の私にも解るようにご解説お願いいたします。

  • SUMPRODUCT関数について

    こんにちわ! 以前にSUMPRODUCT関数を教えていただいたのですが、またわからないポイントが出てきてしまいましてどなたかお教えください。 【例】     A列     B列    C列 1    担当者  オーダー日   カテゴリ 2   A子   2007/9/5   b a 3   B美   2007/9/6   cd 4   C男   2007/9/7   cg 5   D輔   2007/9/7   cv 6   E司   2007/9/5   ca 7   A子   2007/9/7   cv 8   ・      ・     ・ 9   ・     ・     ・ そして別の場所<A12>に 昨日のオーダー =TODAY()-1 という計算用の式を作成し、 次のような式を作成しました。 【式1】 SUMPRODUCT(($A$3:$A$10="A子")*((TEXT($B$3:$B$10,"ymd")=TEXT($A$12,"ymd"))*($C$3:$C$10="cv"))) さらに検索したい項目があり、最初次のように式をまず作成してみました。 【式2】 =SUMPRODUCT(($A$3:$A$10=""A子"")*((TEXT($B$3:$B$10,""ymd"")=TEXT($A$12,""ymd""))*($C$3:$C$10=""cv""))) +SUMPRODUCT(($A$3:$A$10=""A子"")*((TEXT($B$3:$B$10,""ymd"")=TEXT($A$12,""ymd""))*($C$3:$C$10=""ca""))) +SUMPRODUCT(($A$3:$A$10=""A子"")*((TEXT($B$3:$B$10,""ymd"")=TEXT($A$12,""ymd""))*($C$3:$C$10=""ba"")))" 『長い!』と思い、この式を短くしようと、 【式3】 SUMPRODUCT(($A$3:$A$10="A子")*((TEXT($B$3:$B$10,"ymd")=TEXT($A$12,"ymd"))*(OR(($C$3:$C$10="cv"),($C$3:$C$10="ca"),($C$3:$C$10="ba"))))) という式を作成したところ全然ダメでした。 【式2】を簡素化することは可能でしょうか? どうぞ宜しくお願いします。 余談として・・・ 更に、もし可能であれば、他の関数と組み合わせるにはどこに気を付けたらよいのでしょうか?たとえばAND・IF・VLOOKUPなど ・・・こちらはただの興味ですのでご返答は無くてもかまいません。

  • エクセル 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関数について

    SUMPRODUCT関数を使って「タテ100行ヨコ10列のデータの入った表」からA1*B1+A2*B2+A3*B3+……+A99*B99+A100*B100の計算と A1*C1+A2*C2+A3*C3+……A99*C99+A100*C100というように10列共計算しました。 さらに各々の掛け算の結果を小数点以下を切り捨てたいのでTRUNC関数を使おうと思いましたが上手くできません。 他の関数でも良いのですが良い知恵をお貸しください。

  • エクセル関数 SUMPRODUCTについて

    エクセル関数でSUMPRODUCTについて質問させていただきます。 ↓A1 コーラ  A ポカリ  A 珈琲   A 石鹸   B 洗剤   B ポカリ  A 食パン  C 菓子パ  C 洗剤  B   3←C11(Aの数を数えています。) と、入力されているデータにおいては、 =SUMPRODUCT((MATCH($A$1:$A$9&$B$1:$B$9,$A$1:$A$9&$B$1:$B$9,0)=ROW($A$1:$A$9))*($B$1:$B$9="A")) の関数で求めるデータが出ることはわかりました。 (Aの数は4個ですが、ポカリがダブっているので3個として数えるように設定したいのです。同じ様にBの数は洗剤が2つあるので2個として計算します。) しかし、A1~C11のデータをすべて切り取りして 例えばA11からC21に貼り付けた場合はC21の計算結果が”0”になってしまいます。 その際のC21の関数は =SUMPRODUCT((MATCH($A$11:$A$19&$B$11:$B$19,$A$11:$A$19&$B$11:$B$19,0)=ROW($A$11:$A$19))*($B$11:$B$19="A")) になっています。 この場合だと具体的にどのように関数を変化させればいいのでしょうか? ご指導いただければありがたいです。よろしくお願いします。<m(__)m>

専門家に質問してみよう