[[20200227212315]] 『【VLOOKUP】ランキング表作成⇒名前ダブりを解消ax(たたたいやき) ページの最後に飛ぶ

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

 

『【VLOOKUP】ランキング表作成⇒名前ダブりを解消したい』(たたたいやき)

よろしくお願いします。

ランキング表で上位3名を表示。
■A列に順位、B列に名前、C列に記録を表示
A2、B2、C2には第1位の人の順位・名前・記録
A3、B3、C3には第2位の人の順位・名前・記録
A4、B4、C4には第3位の人の順位・名前・記録

をそれぞれ関数を使用して表示させます。

C列の記録については、LARGE関数を使って下記のE列から、数字の大きい順に拾うようにしています。

■E列とF列には、元データとなる記録と名前が入力される。
今回の場合は↓

   E    F

1  記録  名前

2  30   佐藤

3  30   田中

4  35   安田

5  28   斎藤

6  29   早瀬

7  25   安藤

これらを元に、VLOOKUP関数で抽出したところ…

   A   B   C

1  順位  名前  記録

2  1位  安田  35 ※VLOOLUP(C2,$E$2:$F$7,2,FALSE)

3  2位  佐藤  30 ※VLOOLUP(C3,$E$2:$F$7,2,FALSE)

4  2位  佐藤  30 ※VLOOLUP(C4,$E$2:$F$7,2,FALSE)

と「佐藤」がダブってしまい、2つ目の2位は「田中」であってほしいのに、うまくいかずに悩んでいます。

調べてみたところ
・ダブるのはVLOOKUPの弱点
・COUNTIFと組み合わせればいける
などの情報は得られましたが、COUNTIFは使わずに解決したいと考えてます。

https://qiita.com/AquaMeria/items/a4ffeff03b81e7d03abb
こちらのページは参考になるのですが、数式の記述の仕方が違かったのか、うまくいきませんでした。

同じ記録が出た際に、名前がダブらないようにする方法
ぜひ教えていただけないでしょうか?

どうぞよろしくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 例えば得点に行番号でも足して、同点が発生しない様な列を作ってやるとか
 そういう建付けになるんじゃないかなぁ・・・

 例)
 G2 =E2*100+(ROWS($E$2:$E$7)-ROW(A1))
 B2 =INDEX($F$2:$F$7,MATCH(LARGE($G$2:$G$7,ROW(A1)),$G$2:$G$7,0))

 とは思ったんですが、

 >COUNTIFは使わずに解決したい
 これ。もしや作業列禁止とかなんですかね?

 であれば私は現れなかった事にして下さい^^;

(白茶) 2020/02/27(木) 23:48


 VLOOKUP使ってませんが

	A	B	C	D	E	F
1	記録	名前		順位	名前	記録
2	30	佐藤		1	安田	35
3	30	田中		2	田中	30
4	35	安田		2	佐藤	30
5	28	斎藤		4	早瀬	29
6	29	早瀬		5	斎藤	28
7	25	安藤		6	安藤	25

 D2 =IFERROR(RANK(F2,F$2:F$50),"")
 E2 =IFERROR(INDEX(B:B,MOD(AGGREGATE(14,6,(A$2:A$50*100+ROW(A$2:A$50))/(A$2:A$50<>""),ROW(A1)),100)),"")
 F2 =IFERROR(INT((AGGREGATE(14,6,(A$2:A$50*100+ROW(A$2:A$50))/(A$2:A$50<>""),ROW(A1)))/100),"")

 ※元データ範囲 A2:B50としてま。
 
(GobGob) 2020/02/28(金) 07:51

白茶さん、GobGobさん、ご回答どうもありがとうございました。

そんなに難しい式にはならないんだろうなぁ...なんて思っていたら、まさかの一度も使用したことのない関数もあって驚愕です…。
MOD、AGGREGATE・・・はてなんのことやら・・・

ROWやIFERRORも、ここで登場するとは思ってもいませんでした。

あまりにもレベルの高すぎる式だったので、今回はGobGobさんの式をそのまま利用させていただきます。
もっと勉強してすんなりこんな式が書けるように励みたいと思います。

お二方、本当にありがとうございました!

(たたたいやき) 2020/02/28(金) 09:43


 GobGob さんのレイアウトで、記録はすべて正の整数だとして(「0」含む)

 D2 =IF(F2="","",RANK(F2,$F$2:$F$50))
 E2 =INDEX(B:B,INDEX(1/MOD(LARGE($A$2:$A$50+1/ROW($A$2:$A$50),ROW(A1)),1),0))&""
 F2 =IFERROR(LARGE($A$2:$A$50,ROW(A1)),"")

 下コピー

 同じ記録の場合の表示順は元表の上からになります。

	D	E	F	
1	順位	名前	記録	
2	1	安田	35	
3	2	佐藤	30	←
4	2	田中	30	←
5	4	早瀬	29	
6	5	斎藤	28	
7	6	安藤	25	

 ただ、自分ならこういうのはピボットテーブルか普通に並べ替えでやりますね。

 参考まで
(笑) 2020/02/28(金) 11:54

(笑)さん、コメントありがとうございます!
たしかにこれくらい簡単な表であれば、並べ替えでも良さそうですね。

いかんせん平成初期で時代が止まっている職場におりまして…
エクセルがまったく使えない方が多く(並び替えも!)、その人たちが苦戦することなくできればと、奮闘しておりました。

回答どうもありがとうございました!
(たたたいやき) 2020/02/28(金) 22:49


 >エクセルがまったく使えない方が多く

 でも使っているよね!
(意味不明) 2020/02/28(金) 23:02

 数式は試してもらってないようですが
 一応、訂正&補足

 E列の式は ↓ の方がいいです

 E2 =IF(F2="","",INDEX(B:B,INDEX(1/MOD(LARGE($A$2:$A$50+1/ROW($A$2:$A$50),ROW(A1)),1),0)))

 ・A列に数式による空白があるなら、さらに修正の必要あり
 ・記録に「0」もある場合、B列に名前が入力されているのにA列が空白、なんてことは想定していません

 以上、参考まで
(笑) 2020/02/29(土) 13:27

コメント返信:

[ 一覧(最新更新順) ]


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