sumproductとcountifの使用例

このQ&Aのポイント
  • sumproductとcountif関数を使って、重複している個数をカウントする方法について質問です。
  • sumproductとcountifの部分は大体理解できるのですが、>0の部分と、*1の部分が理解できずに困っています。
  • sumproductとcountif関数は、内部でどのような計算を行っているのでしょうか?お知恵をお貸しください。
回答を見る
  • ベストアンサー

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」の部分がどうしても理解できず、悩んでいます。 内部ではどういう計算が行われているのでしょうか? どなたかお知恵をお貸しください。 よろしくお願いいたします。

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

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

その数式は,A1:D1のセル範囲の中に,E1:E5のどれが幾つあるか無いかを計算しているだけで,「重複を数える」というのとはちょっと違っているような気がします。 しかし今ご質問はその式の正誤はとりあえず置いて計算のシクミについてですから,そういうのを確認し勉強する便利な道具として,「数式の検証」というのを利用してみます。 Excel2002,2003ではツールメニューのワークシート分析の中に,Excel2007,2010では数式タブにありますので,問題の式を入れたセルを選んで早速実行してみます。 まず一段階「検証」してみると,  COUNTIF(範囲,い)が2個,  COUNTIF(範囲,え)が2個,  COUNTIF(範囲,ん)が0個,  COUNTIF(範囲,あ)が3個,  COUNTIF(範囲,げ)が1個, それぞれ見つかったようです。 次のステップは  2>0 ですから TRUEです  2>0 ですから TRUEです  0>0 ではないので FALSEです  3>0 ですから TRUEです  1>0 ですから TRUEです 次のステップは  True * 1 は 1です  True * 1 は 1です  FALSE * 1 は 0です  True * 1 は 1です  True * 1 は 1です 最後に合計して4が得られました。

tasuke23
質問者

お礼

「>0」をつける事により戻り値がtrue、falseになるんですね。 そこの概念が理解できなかったので迷走しておりました。 ご回答ありがとうございました。

その他の回答 (1)

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

COUNTIF関数はCOUNTIF(範囲,条件)で、範囲は複数セル(の範囲を指定するのは)質問の式もA1:D5で普通の使い方です。 条件は比較演算子+リテラル値(”>70”)や1つのセル(1つの値)(A1など)を指定するのが普通の使い方です。 普通1つのセル番地しか指定しない関数式の引数部分に複数セルの番地を指定できるのは 配列数式とSUMPRODUCT関数です。(他にもあるかもしれないが代表的なものはこれです。外にリテラル値の配列を指定({ }内に)できる関数がありますが少し事情が違う)。私が配列数式とSUMPRODUCT関数の「双対性」(もともとは数学の言葉)を想像するのはこのためである。 この質問のケースはこの場合で --- この場合E1からE5までのそれぞれの COUNTIF(A1:D5,E1) COUNTIF(A1:D5,E2) COUNTIF(A1:D5,E3) COUNTIF(A1:D5,E4): (COUNTIF(A1:D5,E5) の5回の処理をそれぞれ別に(内部で)やっていて、またSUMPRODUCTなので5式の結果のSUM(和)を取っていると考えられる。 その前に言うべきことは、それぞれの式には>0がついているので「存在する」(かどうか)の条件を見ている。 と言うことはTRUEかFALSEを出している。 例えばセルにA1に3を入れて=A1>4と入れるとFALSEになる(これは実用では使わない場合なので、したことがない人も多いだろうが)これと同じ理屈。 もうひとつ*1をしているのは、TRUEやFALSEを数値に直すためにやっている。この場合では0か1 ですが。 其れで5回の関数のそれぞれは、E1の値がA1:D5に1つでも存在すれば1、存在しなければ0を返している。それをE1:E5までくり返し内部でおこなって、結果を足しているものを結果に出している。 ーー 質問の式の意味を文章で表現すれば、E1:E5の5文字(列)の中でA1:D5の文字列に存在するのはセル数で言うと、4セル(個)ですということになる。 この質問の回答の関数式を、質問者は質問の趣旨に当てはまるとして、ベストアンサーに選んだのかもしれないが、 実際の場面でこの4つと言う結果を得て、それが当てはまる(使える)ケースは想像しにくい。 質問者が質問文章に、はっきり文章で何を出したいかを明記しなかった(表現できなかって)ために、回答の式で迷路に迷い込んでいるのではないかとおもうがどうだろう。

tasuke23
質問者

お礼

重複している一意のデータの個数を求めることができたので満足しています。 迅速な回答ありがとうございました。

関連するQ&A

  • SUMPRODUCT関数とCOUNTIF関数

    A-001 A-001 A-002 A-003 B-001 B-002 A-001 C-001 C-002 とあったときに仮に9個の製品コードであるとして、 A-001は3回でてきていますので種類としては7種類の 製品コードということになります。 "質問:様々ある素材のうち重複しているものは1つだけカウントして上記の7というような値を求める関数がありますか?" 以前このような質問をし、 ”=SUMPRODUCT(1/COUNTIF($A$1:$A$9,A1:A9))” との回答をいただきました。回答通りにやると値が求められました。とても大助かりでした。 そこで、関数のヘルプで どういう関数かを勉強しましたが僕には理解できませんでした。配列とかなんとかやらでてきて……超ムズイ!! だれかこんな僕にとても分かりやすいことばで SUMPRODUCT関数とCOUNTIF関数を教えていただけませんか?EXCELのヘルプは難しすぎる…… 宜しくお願いします。

  • COUNTIFやSUMPRODUCTの関数について

    画像にあるようなExcelの表について 下記の関数を使って出来たことを、もっとB22~C24(セル)を入力せず出来る関数はないのか 教えて頂きたい。また、以下のところに今使っている関数と、求めたいことについて記載しました。  SUMPRODUCT(($A$2:$A$15=$B$22)*(C2:C15=$C$22))の関数を使って   1.C17セルに表示された個数は、A列の2~15の中のAランクの人の「1」の入力された     ところだけのを表すことになっている。  以下もC列のB・Cことである。   2.このことを踏まえて、BランクはC18に「0」が入る。(1の入力されたセルがないため)   3.Cランクは、「長島」に「1」が入力されているので、C19には「1」が入いる。   4.イ~オ列のD17~G19まで同じように表示させてある。  なお、あくまでもア~オの全体の個数の中のA・B・Cのランクの個数をカウントしたいのです。   

  • Excel 関数でcountifの複数条件

    Excelで条件にあった個数をカウントする関数はcountifですが、 複数の条件にあった個数をカウントする場合、countifの式はどうすればよいのでしょうか。 例えば A列の1行から20行で"○"が入っている個数のカウントは =countif(a1:a20,"○")ですが A列の1行から20行で"○"が入っていて、なおかつ B列の1行から20行に"1"が入っている個数のカウントを知りたいです。 =countif(a1:a20,"○")and(b1:b20,"1")ではないですよね。 よろしくご教授願います。

  • countifでできますか?

    複数の名前付きのテーブルを作り、別の表にそのテーブル内の項目をリストボックス化して入力できるようにします。 その表の下部でcountifを使い、例えばAテーブルに含まれる項目の個数を数えたりするにはどんな関数を入れたらよいでしょうか。要は、テーブル毎の個数を表の下部でカウントできるようにしたいのですが、お分かりの方、ご教授願います。ただし、A1とかA2というように個別の項目をカウント条件にするのではなく、そのテーブルに属しているものすべてがカウントされるようにしたいです。

  • SUMPRODUCT関数の使い方

    A列 aaa aaa bbb bbb ccc ccc と入力して、 「aaa」の個数と「bbb」の個数の合計を求める式を教えてください。 見た限りの答えは、「aaa」が2個、「bbb」が2個で4なのですが B1に 「=SUMPRODUCT(A:A="aaa",A:A="bbb")」 としたのですが、「0」が返ってきてしまいます。 B2に 「=SUMPRODUCT(COUNTIF(A:A,"aaa"),COUNTIF(A:A,"bbb"))」 だと、 4が返ってきますが A列を aaa aaa bbb にすると「3」が返ってきてほしいのに、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関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

  • 文字列AかBを含むセル数をSUMPRODUCT関数で求める場合

    文字列AかBを含むセル数をSUMPRODUCT関数で求める場合 エクセル2000です。 A1:A10のセル範囲だとして =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1) とすると、同一セルにA、Bの両方があった場合、重複してカウントされてしまいます。 重複を除外するために、 =SUMPRODUCT(ISNUMBER(FIND({"A","B"},A1:A10))*1)-SUMPRODUCT(ISNUMBER(FIND("A",A1:A10))*ISNUMBER(FIND("B",A1:A10))) と、重複してカウントされた数から両方が存在するセルの数を減じて求めましたが、以下のようなより簡素な式でも求められことがわかりました。 =SUMPRODUCT((ISNUMBER(FIND("A",A1:A10))+ISNUMBER(FIND("B",A1:A10))>=1)*1) この式でなぜAB両方があるセルが重複カウントされないのかどうもわかりません。 ご教示いただければ幸いです。 なお、SUMPRODUCTではなく =SUM(COUNTIF(A1:A10,{"*A*","*B*"}))-SUM(COUNTIF(A1:A10,{"*A*B*","*B*A*"})) でもできることは存じておりますが、今回はSUMPRODUCTの疑問として質問いたしました。

  • エクセルのCOUNTIFについて

    A,B,Cのセル内の数値の個数ををCOUNTIFで求めました。 普通にできたのですが、A,B,Cのセルに関数を入れて、 計算結果をCOUNTIFで求めようとしましたがNGでした。 関数の結果をカウントする方法がありましたらお願いします。

  • SUMPRODUCT関数について

    皆様宜しくお願いします。 最近こちらでSUMPRODUCT関数をお教えいただいてから色々な集計に使っていて、かなり重宝しております。 ところで、私は簡単な集計にはSUMIF関数やCOUNTIF関数等を、複数条件にはSUMPRODUCT関数を使用しているのですが、集計作業においてSUMPRODUCT関数では出来ないものってどんなものでしょうか? お暇なときにご返答をいただければと思います。 宜しくお願いします。

  • SUMPRODUCT関数について

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

専門家に質問してみよう