アプリ版:「スタンプのみでお礼する」機能のリリースについて

ずばりこんなデータから、順位とその人の名前を出す。

1)重複した場合、RANKは、同じ位置して、次の番は、欠としている。
  から、下記のような順位になると思われる。

 氏名 点数 順位
 鈴木 700 5
 斉藤 415 8 
 菅野 700 5
 赤井 780 4
 田村 900 2
 池田 620 7 
 楽谷 900 2
 金田 940 1

 ★問題なのが、同じランクになった人の名前をちゃんと表示したい。
  1位からの点数を表示するのは、LARGE関数でできるんだけど、
  同じランクになっている人が、別々に出てこない。
  とても安易な方法だと思ったんですが、
  検索する範囲(表の行番号)をMATCH関数でもとめておく
  点数をつかうので、当然同じ点数には、同じ行がはいる(上から
  順番だから、1行目と3行目に同じ点数なら、1(順位)が連続する)
  それで、その番号を使いVLOOKUP関数で、名前を拾ってくる。
  其の時、自分で同じ番号のところを修正しておく(1と3にする)
  そうすれば、名前がちゃんと出てくる。
  でも、其のセルには、数式がなくなる。

  ⇒VBAや、難しい関数が使えないと、これが限界なのか。。
   参考にさせてもらうものもみたんですが、
   なかなか・・この苦肉の策でもヨシと思っていいのか・・
   ちょっと自信なくて、、
  
 
 ベスト8(ランクごとに返す)
    点数 氏名 番号
 1位 ヾ  ヾ  
 2位 ヾ  ヾ
 2位 ヾ  ヾ
 4位 ヾ  ヾ
 5位 ヾ  ヾ
 5位 ヾ  ヾ
 7位 ヾ  ヾ
 8位 ヾ  ヾ
   

A 回答 (4件)

質問文章にいろいろ書いてあるが下記のようなことですか。


例データA1:C9は(D列は下記関数の結果を先回りして掲げたものです)
A列  B列   C列   D列 
氏名点数順位
鈴木70055001
斉藤41588001
菅野70055002
赤井78044001
田村90022001
池田62077001
楽谷90022002
金田94011001
D2にRANK(B2,$B$2:$B$9)&TEXT(COUNTIF($B$2:B2,B2),"000")
と入れてB9まで式を複写する。
結果は上記D列のとおり。(同一ランクは99人以下と仮定できるとする)
Sheet2にいって
A2に=OFFSET(Sheet1!$A$1,MATCH(LARGE(Sheet1!$D$2:$D$9,ROW()-1),Sheet1!$D$2:$D$9,0),COLUMN()-1)
と入れてA2をC2まで式を複写する。
A2:C2を範囲指定して、C2で+ハンドルを出し、C9まで式を複写。
結果Shhet2のA2:C9に
斉藤4158
池田6207
菅野7005
鈴木7005
赤井7804
楽谷9002
田村9002
金田9401
と出ます。
1位、2位・・はオートフィルでも作れます。
列順序を質問のようにしたいなら、上記のShhet2の式の
Column()-1のところを点数は2(B列)、氏名は1(A列)にして
式の複写を縦方向だけにし、2列分2回を各々行ってください。
    • good
    • 0

こんばんは。



関数で作る場合です。

データが、A1 ~C9 までとしで、

D列~F列に表示しなおすとして、

 D列  E列  F列 
順位  点数  氏名
1位 
2位 
2位 
4位 
5位 
5位 
7位 
8位 

E列
E2 は、
=LARGE($B$2:$B$9,ROW(A1))
フィルダウン・コピーします。

D列は、
D2~
=JIS(RANK(E2,$B$2:$B$9))&"位"

を入れて、フィルダウンコピーします。
(JISは、全角にする関数です。)

F列は、
F2~

=INDEX($A$1:$B$9,MOD(LARGE($B$2:$B$9+ROW($A$2:$B$9)/100,ROW(A1)),1)*100,)

配列数式ですから、一旦式を入力したら、目的の式にF2を押して、『ShiftとCtrlを押しながらEnterキー』を押して、式を配列数式に変換させます。

それから、フィルダウン・コピーします。

これで、出来たかと思います。
    • good
    • 1

最初の表が見出しを含めてA1:C9、ベスト8の表が見出しを含めてF1:H9の範囲とし、同順位の場合は上に書かれている者が上に来るものとして、下記の方法を試してみて下さい。



1)順位は、C2に
=RANK(B2,$B$2:$B$9)
で以下コピーという方法で出されていると思いますが、それを
=RANK(B2,$B$2:$B$9)+ROW()/100
で以下コピーとします。(人数が50人以上の場合は100をもっと大きな数にして下さい)

2)C2:C9の数値が小数で出て来ると思いますので、セルの書式設定で「数値」「小数点以下の桁数:0」とします。

3)ベスト8の表で順位欄のF2を
=SMALL($C$2:$C$9,ROW(A1))
として以下コピーとします。

4)F2:F9の数値が小数で出て来ますので、範囲を書式設定で「ユーザー設定」とし、種類の欄に「#"位"」と入力してOKとします。

5)氏名欄のG2を
=VLOOKUP(A12,$C$2:$D$9,2,0)
として以下コピーとします。

以上で、一応見た目上はご質問の通りになると思います。
    • good
    • 0

点数でソートするだけだと思いますが。



Sub sort()
Range("A1:C9").sort _
Key1:=Range("C2"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!