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

ある点数を集計した表があるとして、
その表を並び替えて(点数順にして)別シートにリアルタイムに表示する方法ってありますか?

または、そのような関数を教えて下さい。

(おそらく…こんな感じのものじゃないかと…)

ある範囲から1(順位)を抜き出して、その行を「1位」と書かれている所に表示する、 みたいな。

A 回答 (6件)

http://oshiete1.goo.ne.jp/qa4381233.html
の続きでしょうか。同順位の人が複数いることも想定する必要がありますね。
まずは簡単な作業列を使う方法を説明します。
Sheet1に次のような表があるとします。H列は作業列ですが、H2の式は
 =G2*1000+ROW()
になります。下方向にコピーしてください

A列  B列   C列  D列   E列     F列    G列      H列
名前 点数1 点数2 合計 点数1順位 点数2順位 総合順位 並替順位
A   20    20    40    3       3       2       2002
B   30    10    30    2       4       4        4003
C   40    30    70    1       1       1       1004
D   10    30    40    4       1       2       2004

これを別のシートに以下のように並べ替えるには

A列  B列  C列   D列  E列     F列
順位 氏名 点数1 点数2  合計   並べ替え順位
1    C  40     30    70     1004
2    A  20     20    40     2002
2    D  10     30    40     2005
4    B  30     10    30     4003

F2の式(下方向にコピー)
 =SMALL(Sheet1!H:H,ROW(A1))
A2の式(下方向にコピー)
 =INDEX(Sheet1!G:G,MATCH($F2,Sheet1!$H:$H,0))
B2の式(下方向とE列まで右方向にコピー)
 =INDEX(Sheet1!A:A,MATCH($F2,Sheet1!$H:$H,0))

---------------------------------------------------------
次に作業列を使用しない方法を説明しますが、難しくなりますよ
このような式になります(一例です)

B2セルに直下の式を貼り付けて下方向、および右方向にコピーします
 =INDEX(Sheet1!A:A,MOD(SMALL(INDEX((Sheet1!$G$2:$G$99="")*10^5+Sheet1!$G$2:$G$99*100+ROW(Sheet1!$G$2:$G$99),),ROW(A1)),100))

ただしこの式は99人まで対応しています。100人以上999人以下なら式中の範囲と、式中で「100」を掛けたり、剰余を取っているところを1000に変更する必要があります。

A1セルの式は
 =VLOOKUP(B2,Sheet1!$A$2:$G$5,7,0)
になります。下方向にコピーしてください。
C列(点数1)~E列(合計)も「上の長い式」を使わなくてもVLOOKUP関数で表示できますから、ご自身でも試してみてください
    • good
    • 0
この回答へのお礼

有り難うございます。
とりあえずやってみます。

お礼日時:2008/10/09 16:24

同点の場合、表に先に登場した人の順位が上とします。


[Sheet1]
名前 点数
あ  30
い  10
う  20
え  30
お  40

順位計算用の点数を別に作ります。
点数が実数であるならC2に次の式を入れて下にコピー =B2+0.1-Row()/10000
項目が1000点以上あるときは「/10000」の桁を増やします。
[Sheet1]
名前 点数 順位用点
あ  30 30.0998
い  10 10.0997
う  20 20.0996
え  30 30.0995
お  40 40.0994

次にSheet2
1行目に順位 名前 点数 順位用点と入れ、
A2以降に1,2,3、…と連番。
D2に =LARGE(Sheet1!C:C,A2) と入れて下までコピー
B2に =INDEX(Sheet1!A:A,MATCH(D2,Sheet1!C:C,0)) と入れて下までコピー
C2に =INDEX(Sheet1!B:B,MATCH(D2,Sheet1!C:C,0)) と入れて下までコピー
[Sheet2]
順位 名前 点数 順位用点
1 お 40 40.0994
2 あ 30 30.0998
3 え 30 30.0995
4 う 20 20.0996
5 い 10 10.0997

最後にSheet1のC列、Sheet2のD列を非表示にして完成
    • good
    • 0

RANK関数とVLOOLUP関数で


Sheet1
   A   B    C
1 順位  名前  点数
2  1   あ   92
3  5   い   10
4  4   う   13
5  2   え   91
6  3   お   46
  A2 =RANK($C2,$C$2:$C$9,0)
  A6まで下にオートフィル
  A1:D6まで「順位」と名前を定義

Sheet2
   A   B    C
1  順位  名前  点数
2   1   あ   92
3   2   え   91
4   3   お   46
5   4   う   13
6   5   い   10
B2 =VLOOKUP($A2,順位,2)
C2 =VLOOKUP($A2,順位,3)
それぞれを6行までオートフィル
    • good
    • 0

仮に Sheet1が


 A   B
氏名  点数
 Aさん 10
 Bさん 30
 Cさん 20
・・・
とあって
Sheet2のB列に
=LARGE(Sheet1!B:B,ROW(B1)) 下までコピィ
*点数が高い順番に表示される
A列に
=INDEX(Sheet1!A:A,MATCH(B1,Sheet1!B:B,FALSE)) 下までコピィ
点数にあった人の氏名を表示 できます。
但し、同点はないものとしてです。
    • good
    • 0

別シートには式で参照するようにしてあらかじめセットしておけば、元の値の変更がリアルタイムに反映されます。



>おそらく…こんな感じのものじゃないかと…
情報がないので、こんな感じという表記で・・・(詳しくはヘルプを参照)

=INDEX(表の範囲,MATCH(ROW(),順位の範囲,0),表示する表の列番号,1)
(「表の範囲」、「順位の範囲」は絶対参照にしておく)
表示したい列の内容によって、「表の列番号」は各列で指定

作成した行を下方にオートフィル
(このままだと順位が連番でない場合や、その番号がない場合はエラーが出ますが、エラー処理を追加することで、空白などにすることは可能です。)
    • good
    • 0

最小=1位ならsmall関数・最大=1位ならlarge関数でできるんではないかと思います。

    • good
    • 0

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