• ベストアンサー

SUMPRODUCT関数について

対象は D10からK39 リストは AD1からAJ1まで で、 各列にリストの文字のある数をあらわしたい。 以前、(例えばDの列) 40行目に =SUMPRODUCT(COUNTIF(E10:E39,$AD$1:$AJ$2)) でどうかと教えてもらい、うまくいってはいますが、理解ができていません。 今後のために =COUNTIF(D10:D39,$AD$1:$AJ$2) ではなぜダメなのかを理解したいんですが?

noname#141256
noname#141256

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

> =COUNTIF(D10:D39,$AD$1:$AJ$2)ではなぜダメなのか COUNTIF関数単独では検索値を複数指定できません。$AD$1:$AJ$2という範囲指定が出来ないのです。ですから通常は、=COUNTIF(D10:D39,$AD$1)として一つの値を検索します。 =COUNTIF(D10:D39,$AD$1)+COUNTIF(D10:D39,$AE$1)+COUNTIF(D10:D39,$AF$1)+途中省略+COUNTIF(D10:D39,$AJ$1) として初めて$AD$1:$AJ$2という範囲にある複数の値を検索できますね。 これを合算したのがSUMPRODUCT関数です。

noname#141256
質問者

補足

さっそくありがとうございます。 なんとなく分かりました。 でも、<$AD$1:$AJ$2という範囲指定が出来ない>のに、 SUMPRODUCT() のカッコ内ではOKなんですか?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

COUNTIF関数の条件は複数範囲を指定して、1度にCOUNTは出来ない関数だからです。 質問者の想像している表現に近い物に 例データ A2:A10 a b c d e a f g b b a a C2:C3に a b 空きのセルに =SUM(COUNTIF(A2:A20,C2:C3)) と入れて、SHIFT,CTRL,ENTERのキーを同時押しする。 (配列数式) ガある。 結果7 意味はA2:A20の範囲で値がC2かC3の値が出現する回数を足す、となり 素人にもわかりやすいが、次元が違う考え方が取り入れられていて、 仕組みも含めてエクセルでは配列数式は上級編ということになっている。この式がシート上に多いと計算時間がかかりメモリを食うかもしれないので、普通はSUMPRODUCT関数の回答が多い。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> SUMPRODUCT() のカッコ内ではOKなんですか? はい、それがSUMPRODUCT関数の使い勝手が良いところでして、他にも複数条件検索などでよく使われます。 こんな感じ↓ http://miyahorinn.fc2web.com/faq/faq100.html

関連するQ&A

  • sumproductとcountifの使用例

      A B C D E 1 あ あ あ が い 2 い う か ぎ え 3 う い さ ぐ ん 4 え え た げ あ 5 お お な ご げ =SUMPRODUCT((COUNTIF(A1:D5,E1:E5)>0)*1) 上記は重複している個数が何個あるか(同じデータが複数回でてきても1個とカウントする)を出す関数なのですが、 sumproductとcountifの部分は大体理解できるのですが、 「>0」の部分と、「*1」の部分がどうしても理解できず、悩んでいます。 内部ではどういう計算が行われているのでしょうか? どなたかお知恵をお貸しください。 よろしくお願いいたします。

  • エクセル 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関数を使いA列の対象値(LEFT関数を使い左一文字を検索対象としC列の該当値の合計を集計していますがLEFT関数で検索対象を複数にする場合はどのようにすればいいのでしょうか? 下記の場合はsとdを検索対象としたいのですが。 宜しくお願いいたします。   A  B  C 1 sb    20 2 sc    30 3 sd    40 4 db    50 5 dc    60

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

  • VBA SUMPRODUCTについて

    (1)atai = Evaluate("SUMPRODUCT((D2:D19000 = ""東京"") *        (BH2:BH19000 = ""みかん"") * AX2:AX19000)") (2)atai = Evaluate("SUMPRODUCT((D2:D & K = ans) *        (BH2:BH & K = ""みかん"") * AX2:AX & K)") (1)では atai(値)を得ることが出来るのですが、 (2)ではエラー(型が一致しません)となってしまい値を得ることができません。    ""の括り方、()の使い方、&の使い方が間違っているのでしょうか? ※msgBoxで確認済みですが、kは最終行(取得出来ています)、   ansは東京(取得出来ています) 【やりたいこと】 D列が「東京」となっているもので、かつ BH列が「みかん」となっているAX列の数字のトータルを求めたい。 どなたか、ご教示の程お願い申し上げます。

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

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • SUMPRODUCT関数について

    指定された条件にあったセルの数を数えたいのですが、うまくいきません。 具体的に言いますと、競馬のデータなのですが、 セルG7:G33にコースの距離(1400,1600,2000など) L7:L33に着順(1,2,3,4,など)が入力されています。 ちなみにどちらも数値のみで[m]や[~着]などの記号は入力していません。 この中で、1600以下のレース(1000~1500まで)の着順や1600以上のレースの着順をそれぞれ1着、2着、3着、4着以下というように具体的に分けたいのですが、どうすれば良いでしょうか? 表にすると a       b       c        d        e 1600> (1着の数) (2着の数) (3着の数) (4着以下の数) 1600> (1着の数) (2着の数) (3着の数) (4着以下の数) こんなイメージです。 COUNTIFで1600以上のレース数はだせたのですが、着順を個別に出すことが出来ません。SUMPRODUCT関数かなとも思ったのですが、エラーか[0]になってしまいます。

  • =SUMPRODUCTで、縦列全てを対象とする方法

    質問させていただきます。 「SUMPRODUCT」を使って集計表を作成しておりますが、 以下の設定が可能かどうかお教えいただければありがたいです。 現在集計表には、=SUMPRODUCT((A1:A65500="入場者数")*(B1:B65500="本日")) と設定されております。 しかし、AとB列は共に全てを対象としたいと考えておりますので、 出来れば65500という数字を入れずにAとB列を一括設定できないかと思っております。 例えば、「COUNTIF」の場合は、=COUNTIF(A:A,"入場者数")と入力すれば、 A列全てが対象となります。 他の掲示板で質問してみましたが、今のところこの件に関しては回答をいただけておりません。 もし設定方法があれば是非お教えください。 よろしくお願いいたします。

  • エクセル2003の、関数を教えてください。

    エクセルの関数で、三つの条件を満たし、なおかつその中の1つは除く数式を探しています。 たとえば、A列  B列  C列      担当 売上月 区分      山本 1月   市      田中 2月   町      鈴木 済    国 としますと、担当が山本で、区分が市 となっている 済を除いた数 がいくつなのか? を数えたい場合、どんな関数を使えばいいのでしょうか? ここで教えていただいた方に、下記の方法を教えていただきやってみたのですがうまくいきません・・・何かがいけないのでしょう・・・ 1.D列に[判定]などの項目で、以下の数式を記述。  =IF(A2="山本",IF(B2<>"済",IF(C2="市","対象",""),""),"")   ※2行目(D2)への記述例です。 2.1の数式をD2から下方向へコピー。   ※データ終了行まで 3.(例えば)E列の1行目などに、以下の数式を記述。  =COUNTIF(D2:D100,"対象")   ※データが100行存在する場合の記述例です。 これで、3.の  =COUNTIF(D2:D100,"対象")  を貼り付けましたが 0 と出てしまいます

専門家に質問してみよう