[[20041229131500]] 『重複している数値を1として数える』(匿名) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『重複している数値を1として数える』(匿名)

どなたか教えてください。

   A
1 200
2 200
3 195
4 185
5 200
6 170

という風に、A列に数値が並んでいるとします。
このとき、A1から順にA6まで数値の個数を数えるとき、COUNT(A1:A6)では「6」と返ってきますが、
A1からA6の間で、重複している「200」を「1」として数え、A6の170を「4」と数えることができる関数は
ありますでしょうか?
つまり、数値の種類の個数を調べる関数です。どなたかご存知の方教えてください。


 おそらく、他の先生方からもっとスマートな回答が出てくると思いますが、
もし作業列の使用が許されるのでしたら、こんなのを思いつきました。
A1:A6にデータがあるとした場合
B1=IF(COUNTIF($A$1:$A$6,A1)=1,COUNTIF($A$1:$A$6,A1),1/COUNTIF($A$1:$A$6,A1))
として、B6までフィルハンドルでコピーします。
そして、B7=SUM(B1:B6)で個数がでます。
チョット格好の悪い数式でしたね。・・・・反省  (SS)


 こちらも作業列を使う方法です。
 B1セルに、=IF(COUNTIF($A$1:A1,A1)=1,1,"")  C1セルに、=IF(B1=1,SUM($B$1:B1),"") とそれぞれ入力。
 後は下へコピーして下さい。(純丸)


 これでよいかな?
 Shift + Ctrl + Enter で配列数式として入力します。
 (ramrun)

 =COUNT(FREQUENCY(A:A,A:A)^0)


皆様、お返事ありがとうございます。
実は、いうのを忘れていましたが、A6の170を「4」と数えることの意味ですが、
その「4」をSMALL関数の引数として使いたいのです。つまり、SMALL関数は
=SMALL(範囲、順位)ですよね。この「順位」という引数に「4などの数値が返ってくる関数」
を使いたいのです。
つまり、A1は上から数えて1番目、A3の195は、200の重複を無視すると、上から数えて2番目、
同様に、A4は上から数えて3番目、A6は4番目ですよね。
重複を無視して、上から数えた順番をバシッと一発で指定できる関数はないものかと思っています。
どなたかご存知の方、ご教授ください。


 私の作業列を使うなら、=VLOOKUP(170,$A$1:$C$6,3,FALSE) で 4 が返りますが、
 多分作業列無しで出したいのでしょう。もうちょっと考えてみます。(純丸)


 お久しぶりです。

 A1の値は常にユニークなので、B1に 1 と入力
 B2に
 =IF(COUNTIF(A$1:A2,A2)=1,COUNT(B$1:B1)+1,"")
 としてフィルダウン

 こういうことですか?
 (jindon)


 上から数えることがSMALLに使えるというのに疑問ですが、
 これでどうですか?
 B1に入力し、Shift + Ctrl + Enter。
 (ramrun)

 =IF(COUNTIF(A$1:A1,A1)>1,VLOOKUP(A1,A$1:B1,2,FALSE),COUNT(FREQUENCY(A$1:A1,A$1:A1)^0))


 私も一案
=SUMPRODUCT(N(MATCH($A$1:A1,$A$1:A1,)=ROW($A$1:A1)))
(ケン)

皆様の考え方を参考にさせていただき、無事に解決しました。
どうもありがとうございました。
(匿名)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.