- ベストアンサー
sumproductとcountifの使用例
- sumproductとcountif関数を使って、重複している個数をカウントする方法について質問です。
- sumproductとcountifの部分は大体理解できるのですが、>0の部分と、*1の部分が理解できずに困っています。
- sumproductとcountif関数は、内部でどのような計算を行っているのでしょうか?お知恵をお貸しください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その数式は,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が得られました。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
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つと言う結果を得て、それが当てはまる(使える)ケースは想像しにくい。 質問者が質問文章に、はっきり文章で何を出したいかを明記しなかった(表現できなかって)ために、回答の式で迷路に迷い込んでいるのではないかとおもうがどうだろう。
お礼
重複している一意のデータの個数を求めることができたので満足しています。 迅速な回答ありがとうございました。
お礼
「>0」をつける事により戻り値がtrue、falseになるんですね。 そこの概念が理解できなかったので迷走しておりました。 ご回答ありがとうございました。