• ベストアンサー

EXCELでの重複データカウント方法について(過去問読みましたがわかりません)

いつもお世話になっております。excel97の関数に関してです。 過去問を検索し、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=118918において、 質問:会社名のデータが1万件あります。 その中には、同じ会社名が重複しているものがあります。 そこで、重複しているデータは1つのものとしてカウントし、全部で何件の会社が存在するかカウントする方法はあるでしょうか? 回答:関数でやるとすると。。。。 データが、A1~A10に入っているとします。 =SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10)) とA11に数式を入力します。 これではいかがでしょうか?? 解説 COUNTIF関数でそれぞれの会社の数をカウントし、 SUMPRODUCT関数で配列の積をもとめます。 というのがあり、未熟者の私は理屈はよく分からないまま、この式でやってみたあと実際に数えてみたのですが、いつも正解数より1多くなってしまうのですが、この式の最後に-1を付ければいいのかな? と思ったのですが、いかがでしょうか?

noname#63648
noname#63648

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

  • ベストアンサー
  • hiromuy
  • ベストアンサー率27% (103/370)
回答No.8

GO! ・・・(*_*)? ※一応、適当な箇所で会社名を" "に変えてみて、結果が正しいかご確認を・・・

noname#63648
質問者

お礼

無理を聞いて頂き、ありがとうございます! 確認もしました。 お礼にhiromuyさまの質問が、私のわかることならお答えしようと思い(パソコン関係は無理そうですが(^^;)、検索してみましたが、残念ながら、ひっかかりませんでした。(文章中に名前が出てこないと、ひっかからないそうですね。) 感謝の表しようがありませんが、本当に助かりました。

その他の回答 (7)

  • hiromuy
  • ベストアンサー率27% (103/370)
回答No.7

hiromuyです。 あれ!?そうですか。う~ん? 数式後半のIF文中で、 COUNTIF(A1:A10,0)=0が条件式ですが、これはA1:A10の範囲にあるブランクセル(数式は入力されている)の個数が0の場合ということで、 TRUEの場合、0 FALSEの場合、1 を返すようにしています。 従って、ブランクセルが1つ以上あれば、FALSEの場合の「1」が返り、-1されると思ったんですが・・・ (ブランクセルが0個(ない)場合はTRUEの「0」が返り、-1はされない) IF(COUNTIF(A1:A10,0)=0,0,1) これでいけると思ったんですが、最後の並びが(0,1,0)でうまくいくのであれば、他の原因があるのでしょうか? 色々想像してみたのですが、申し訳ありませんが今のところ思いつきません。

noname#63648
質問者

補足

たびたびほんとうにありがとうございます。遅くなり申し訳ありません(風邪でダウンしておりました)。 確かに、そう言われてみると、理屈としては(0,1,0)ですね。 それで、ブランクをゼロと認識しているのかどうなのかがそもそも疑問なので、(A1:A10," ")と、この部分を0の代わりに" "としてみました。そうしたら、IF(COUNTIF(A1:A10," ")=0,0,1) この式で、正しい結論が導けるようです。 hiromuy様、また甘えて申し訳ありませんが、これで良し! と、ゴーサインを頂けると大変心強いのですが...。

  • hiromuy
  • ベストアンサー率27% (103/370)
回答No.6

遅ればせながら再登場です。 ブランクセル(数式は入力されている)は「0」と見なされている様ですので、下記のように、 =SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10))-IF(COUNTIF(A1:A10,0)=0,0,1) として、ブランクが1つでも存在した場合に-1するようにしてみるのはどうでしょうか。

noname#63648
質問者

補足

ありがとうございます。 やってみました。もしや、最後の(・・・=0,0,1)は、(・・・=0,1,0)ではないでしょうか? それだと理屈上も納得ですし計算もうまくいくのですが。 手取り足取り教えて頂かないとだめなもので、いちいちホント申し訳ありません。

  • comv
  • ベストアンサー率52% (322/612)
回答No.5

再び こんばんは! >ブランクセルを1と数えてしまうようです。 MATCH()関数ではブランクセルがあると#N/Aとなりますので たぶんスペースが入力されているセルがあるのでは? ・両方(ブランク スペース)をカウントしない式 配列数式です  =SUM(IF(TRIM(A1:A10)="",0,(MATCH(A1:A10,$A$1:$A$10,0)=ROW(A1:A10))*1)) と数式バーに入力後(数式バーにカーソルがある状態で)  [Ctrl]+[Shift]を押したまま[Enter] で入力確定

noname#63648
質問者

お礼

本当にたびたびありがとうございます。計算式をすべてコピーペーストしたので、スペースが入力されたセルは無いと思います。今回は、no.6の方が教えて下さったやり方で行こうと思うのですが、後学の為に、もしよろしければ教えて下さい。[Ctrl]+[Shift]を押したまま[Enter] というのは、単にEnterで入力確定するのと、どう違うのでしょうか。やってみたところ、{}のカッコが自動的に付いた気がするのですが、それは関係無いでしょうか?

  • comv
  • ベストアンサー率52% (322/612)
回答No.4

こんにちは! A1からA10であれば 記載された式でも問題なく 結果が返る筈ですが、皆さんの書かれている通り 項目行を含めているのでは? ただし範囲が大きいと非常に重くなります。 配列数式の中でCOUNTIFで最終範囲まで配列検索 しますから・・・・ 以下の式にすれば  =SUMPRODUCT((MATCH(A1:A10,$A$1:$A$10,0)=ROW(A1:A10))*1) MATCH()はヒットしたところで検索を終了しますので 多少は軽くなると思います。 範囲がA2:A1000の場合でも ROW()内の範囲は必ず A1から初めて同配列数で終了にして下さい→ A1:A999  =SUMPRODUCT((MATCH(A2:A1000,$A$2:$A$1000,0)=ROW(A1:A999))*1)

noname#63648
質問者

お礼

ニューアイディアをありがとうございます。 やってみましたが、やはり、1多くなってしまいました。 下にも書きましたが、ブランクセルを1と数えてしまうようです。 もー、嫌いっ変なパソコン! (八つ当たりですね(^^;)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

>理屈はよく分からないまま... =SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10)) の意味を考えてみると、これは、  1/COUNTIF(A1:A10,A1)  1/COUNTIF(A1:A10,A2)  1/COUNTIF(A1:A10,A3)     :  1/COUNTIF(A1:A10,A10) の合計でしょう。例えば、SUMPRODUCT(B1:B10)=SUM(B1:B10)が成立するのと同じ理屈です。 配列の積を求めているよりも、配列の和の機能(×1をしてたしている)ですね。 上の式を具体化してみると、6行あったとして、  AA 3 1/3  AA 3 1/3  AA 3 1/3  BB 2 1/2  BB 2 1/2  CC 1 1/1 となります。2つ目が『COUNTIF(A1:A10,A1)』に対応、3つ目が 『1/COUNTIF(A1:A10,A1)』に対応。 3つ目を全部たすと『3』になるわけです。 重複個数を数えて、例えば10個あればその価値を1/10にして、10個たして『1』が出てくるわけです。 そう考えると、算式で誤差がでるとは考えにくいですね。『-1』するよりも、先頭行に『会社名』とかの表題が入っていないでしょうか。その場合は、算式のA1をA2に変えればいいと思います。 参考になった?

noname#63648
質問者

お礼

ありがとうございます! 1/COUNTIF(A1:A10,A1)  1/COUNTIF(A1:A10,A2)  1/COUNTIF(A1:A10,A3)     :  1/COUNTIF(A1:A10,A10) これを見て、理屈が分かりました! 感動です。 でも、下にも書きましたが、空欄をカウントしているようなのです・・・。

  • hiromuy
  • ベストアンサー率27% (103/370)
回答No.2

関数に問題はなさそうですので、同じ会社名でも文字が全角/半角で違っていたり、会社名の最後または途中にスペースが入ってないか確認してみてください。 もし、上記のようなものがあれば、違う内容と判断されてしまいます。

noname#63648
質問者

お礼

あっ、昨日お世話になったhiromuyさま、この質問にもお答え頂き、ありがとうございます! 「会社名」は私の場合会社コードで、しかも元データからそのままコピー&ペーストしているので、間違いないはずなのです。 ただ、下にも書きましたが、空欄を1とカウントしてしまうようなのです。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> =SUMPRODUCT(1/COUNTIF(A1:A10,A1:A10)) これを実行すると「10」が取得できます。 「会社名が9件なのに」ということならば「タイトル行」を加算してませんか?

noname#63648
質問者

補足

ありがとうございます! タイトル行加算していません。 どうやら、ブランクを1とカウントしてしまうようなのです。 どの列もブランク(計算式は入っているが、その結果ブランクとなっている)のセルがあるので、それで、必ず、1加算されてしまうようなのです。 変ですよね?

関連するQ&A

  • EXCEL 重複データのカウントについて

    EXCELにて、データをカウントしたいのですが、 重複しているデータは1件とします。 SUMPRODUCT関数を使えばできると思うのですが、 データが、複数のシートにある場合はどのようにしたらよいでしょうか? いろいろ試してみましたが、うまくいきませんでした。よろしくお願いします。

  • EXCELでの重複データカウント方法について

    会社名のデータが1万件あります。 その中には、同じ会社名が重複しているものがあります。 そこで、重複しているデータは1つのものとしてカウントし、全部で何件の会社が存在するかカウントする方法はあるでしょうか?

  • エクセルのデータで重複をカウントしない方法

    現在アンケートデータが1000件ほどあり、重複しているデータがあります。 住所別、職業別集計一覧を=COUNTIFで作成しているのですが、 重複している分までカウントされてしまいます。 今後もデータは増え続けるのですが、重複(初回はカウント)しているデータをカウントしない方法はないでしょうか?

  • エクセルの条件付きでデータの種類をカウントする関数

    エクセルの条件付きで重複データや空白データをカウントせず、種類数をカウントする関数の書き方を教えてください。 C列の5行目から14行目に「品目」が入力され、D列に「売れた数」が入力されているとします。売れていない場合は「売れた数」は空白。品目等のデータがない行もあります。品目には重複しているものもあります。 ここで、G5セルに「売れた品目の種類数」を表示させる関数をどのように書けばよいか教えてください。 SUMPRODUCTやCOUNTIFまたはMATCH関数を使っていろいろ試してみましたが、うまくいきません。

  • エクセル 重複データのカウント

    初めまして。 初めて質問いたします。 よろしくお願いいたします。 エクセルで、A列に7ケタの数字13万件         B列に同じく7ケタの数字100~2000件         C列にB列にデータがある行まで=COUNTIF($A$2:$A$130000,B2) 上記の状況で、C列の値は1か0しか出ない状態なので、 セルD1に=COUNTIF(B2:B2000,0)と入れてB列にあるけどA列にないデータの 数(重複していないデータ)をカウントしています。 しかしながら、ベースとなっているA列のデータが13万件と多いので、 再計算などに結構時間がかかっているので、どうにかならないかと思いまして 質問させていただきました。 ちなみに、A列のデータは少しずつ増えていきます。 1度B列にあってA列にないデータは、次にB列に違うデータを入れてカウントする際に 新規データとしてA列に追加しています。 なんとか処理が速くなる方法などありましたらご教授下さい。 よろしくお願いいたします。

  • Excel 重複データーのカウント

    Excelの関数に対する質問です。   =COUNTIF(A1:E1,A1) はA1と重複するデータを求めますが、この方法ではなく A B C D E 0 A A B C D 1 A A B C C 2 このように 行に重複するデータのデータ件数をいっきに求められる関数があるのでしょうか? それともそれぞれのデータを=COUNTIF(A1:E1,A1)~でそれぞれもとめた後、それを合計しなければならないのでしょうか? よろしくお願いします。

  • エクセル関数  重複したものを削除する

    皆さんおお知恵を拝借させてください。 101 102 103 104 105 106 102 103 101 とあったときに 101 2個 102 2個 103 2個 104 1個 105 1個 106 1個 となりますので、コード数としては6個になりますが、このように数えれる関数がないものかとこのサイトで検索していましたら、 SUMPRODUCT(1/COUNTIF($A$1:$A$9,A1:A9)) という関数があることが分かりました。そこで早速こちらの関数を試してみたところ、確かにエクセルに空白のセルがない状態であれば重複数字を数えることなしにカウントできることがわかりました。 しかし、ある事情により私のエクセルデータには空白のセルがあり、冒頭の例でいきますと SUMPRODUCT(1/COUNTIF($A$1:$A$11,A1:A11))   (空白セルが2つあるため) としなければならないのですが、そうすると #DIV/O というエラーがでてしまいます。 どのたか対処方をご存知の方教えていただけないでしょうか? よろしくお願いします。 ちなみに今回記載した三桁のコードは便宜上101~106と、つらなった数字をつかっていますが、実際にはそうはなっていません。

  • 重複した項目のカウント(条件がもう一つあります)

    A   あ B   あ A   い B   う C   あ B   い B   あ C   あ A   い ↑のようなセルがあったとします。 これを、左側の項目ごとに、重複を無視して右側の項目の数を数えたいです。 例えば、 Aについては"あ"と"い"の2つだから2、 Bについては"あ"と"い"と"う"で3、 Cについては"あ"だけなので1 という具合です。 補助列を使ったりマクロで数えたりすればできるのですが、 関数のみを使ったやり方はないでしょうか。 ※ある範囲内で重複を無視してカウントするだけなら  =SUMPRODUCT(1/SUBSTITUTE(COUNTIF(範囲,範囲),0,0))  でできました。    これを使って、Aについて、Bについて、Cについての条件も  加えようとしましたが、  やり方がわかりません。

  • Excel、重複セルを1とカウントする

    jcb3092で御座います。 標記の件で教えて下さい。 以下の文字列をカウントするのですが f5:f154 前に教えて頂いたこの関数に範囲を置き換えて =INT(SUMPRODUCT(1/SUBSTITUTE(COUNTIF(F5:F154,F5:F154),0,100))) としました。 教えて頂きたいのはこの関数の終わりの部分(セル範囲の後)の 0,100は何を指しているのかで御座います。 これを理解していないと安心できません。 よろしくお願い申し上げます。

  • エクセルで重複データをカウントしたい

    エクセルで下記のような表があり2000件くらいのデータがあります。 毎月出すシートの為、数は流動的です。(500~3000くらいです) ---- A  |B  |C  | 名前 | 性別|お菓子| ひろし| 男 | 飴 | けんじ| 男 | ガム| けんじ| 男 |チョコ| えみこ| 女 | ガム| 太郎 | 男 | 豆 | よしえ| 女 |チョコ| えみこ| 女 |チョコ| ---- 全体の人数を知るには SUM(IF(A2:A2000<>"",1/COUNTIF(A2:A2000,A2:A2000),0) の配列関数でカウントできますが、男女別の人数を知るにはどのような関数を入れればでるでしょうか。 男 3 人 女 2 人 のような結果がほしいです。 よろしくお願いします。

専門家に質問してみよう