- ベストアンサー
【エクセル】重複を除いたカウント
例えば以下のようなリストのなかで、BがZである列の 数をカウントしたいのですが、 Aの値が等しい列はダブルカウントしないように集計 したいと考えています。 以下の例ではBがZの列の内、Aが3、6、8の3種類が あるので、答えとしては「3」となります。 A B ------- 1 X 2 Y 3 Z 3 Z 3 Z 4 Y 5 Y 6 Z 6 Z 7 X 8 Z 9 Y このような場合、どのような計算式(関数)を使えば良いでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
jindonです(#1) 問題をよく読んでいませんでした。 作業列(C列)に =CONCATENATE(A1,B1) もしくは単純に =A1&B1 として、C9までコピー =SUM(IF(RIGHT(C1:C9,1)="z",1/COUNTIF(C1:C9,C1:C9))) です。
その他の回答 (6)
- jindon
- ベストアンサー率43% (50/116)
jindonです 下記のいずれの配列式も用を成さないようです。 これは、作業列なしでは無理なようですね。
お礼
なんども回答を頂き、ありがとうございました。 Exelの奥深さと楽しさを改めて認識する事が できました。 これからもっとExelの勉強をしようと思います。
- jindon
- ベストアンサー率43% (50/116)
jindonです ROUNDUP(SUM(IF(B1:B12="z",1/COUNTIF(A1:A12,A1:A12))),0) でしょうか?
- jindon
- ベストアンサー率43% (50/116)
jindonです =SUM(IF(B1:B12="z",1/COUNTIF(A1:A12,A1:A12))) でも良さそうな感じですが、深く検証はしていません。 エクセルでSQLが関数内で使用できるとは知りませんでした。 その他の解決策としては、やはりVBAだと思います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
特殊なやり方として、 SQL.REQUESTワークシート関数を使う方法があります。 アドインをMicrosoftからダウンロードすることで、SQLリクエストをワークシート関数から行えます。 表の範囲を例えばtableと名前を付けてファイルを集計と名前を付けて保存したとします。 適当なセルで =COUNT(SQL.REQUEST("DSN=Excel Files;DBQ=集計.xls",,3,"SELECT DISTINCT A FROM 集計.table WHERE B='Z'")) でレコード数3が求められます。
お礼
ご回答頂きありがとうございます。 SQLを使えれば相当色々な事ができそうですね。 素晴らしいです。 ただ、今現在の私にSQLの知識が殆ど無いので、これを機会に勉強しようかと思います。
- a269783255
- ベストアンサー率17% (15/87)
A列の数字がどんな範囲で変化するのかわかりませんが、 仮に1~9の間だとすれば、 C列に「=A1&B1」と計算式を入れれば、 C列は「1X,2Y,3Z.....9Y」となります。 で、D列1行目に「=COUNTIF(C$1:C$12,"1Z")」 D列2行目に「=COUNTIF(C$1:C$12,"2Z")」 ...... D列9行目に「=COUNTIF(C$1:C$12,"9Z")」 と計算式を入れ、 D列12行目に「=9-COUNTIF(D1:D9,0)」 としたらいかがでしょう?
お礼
ご回答頂きありがとうございます。 =A1&B1というやり方で2つの列をくっつけてしまうと言う 技があったのですね。大変参考になりました。
- jindon
- ベストアンサー率43% (50/116)
=SUM(1/COUNTIF(B1:B9,B1:B9)) として、Ctrl+Shit+Enter で確定
お礼
ご回答頂きありがとうございます。 #2様の解法をさらに進めた感じの解法で、 便利さが更にUP!していて感動です(^^) おかげさまで目的の集計作業を完了できました!! で、厚かましいようですが今後の勉強のために、 もしよろしければご教授ください。 今回の解法では一旦C列という作業のための列を 使いますが、これを使わずに1つの式だけに まとめてしまう事はできるのでしょうか? そうするためには#3様のご回答にあるように SQLを使う以外にはないのでしょうか?