• ベストアンサー

エクセルの並び替えのことで・・・。

ある点数を集計した表があるとして、 その表を並び替えて(点数順にして)別シートにリアルタイムに表示する方法ってありますか? または、そのような関数を教えて下さい。 (おそらく…こんな感じのものじゃないかと…) ある範囲から1(順位)を抜き出して、その行を「1位」と書かれている所に表示する、 みたいな。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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関数で表示できますから、ご自身でも試してみてください

REGZI
質問者

お礼

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

その他の回答 (5)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

同点の場合、表に先に登場した人の順位が上とします。 [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列を非表示にして完成

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.4

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行までオートフィル

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

仮に 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)) 下までコピィ 点数にあった人の氏名を表示 できます。 但し、同点はないものとしてです。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

別シートには式で参照するようにしてあらかじめセットしておけば、元の値の変更がリアルタイムに反映されます。 >おそらく…こんな感じのものじゃないかと… 情報がないので、こんな感じという表記で・・・(詳しくはヘルプを参照) =INDEX(表の範囲,MATCH(ROW(),順位の範囲,0),表示する表の列番号,1) (「表の範囲」、「順位の範囲」は絶対参照にしておく) 表示したい列の内容によって、「表の列番号」は各列で指定 作成した行を下方にオートフィル (このままだと順位が連番でない場合や、その番号がない場合はエラーが出ますが、エラー処理を追加することで、空白などにすることは可能です。)

  • heinell
  • ベストアンサー率35% (420/1172)
回答No.1

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

関連するQ&A

専門家に質問してみよう