• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルRANK関数の同率順位を別表に抽出する時)

エクセルRANK関数を利用して同率順位を別表に抽出する方法

このQ&Aのポイント
  • エクセル2003を使って同率順位の店名を抽出する方法について教えてください。
  • ランキング表を作成しているのですが、RANK関数を使って順位を出しています。しかし、同率の順位が重複して表示されています。1~5位の順位表を作りたいのですが、3位以下の重複した順位の店名が表示されません。どのようにすれば解決できるでしょうか。
  • 表示する順位表は「あいうえお順(A~Zの若い順)」で作成したいです。どのようにすれば実現できるでしょうか。エクセル初心者なので、わかりやすく教えていただけると助かります。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.1です。 たびたびごめんなさい。 投稿後気になったのですが、前回の方法はE列の順位は必ず1~5までという前提ですので、 同順位でも表示上はランクの差が出てしまいます。 E列順位はC列の順位そのものを表示させるのが一般的だと思いますので、 もう一度やってみました。 ↓の画像でC列は小細工せずにRANK関数だけにしてC2セルに =RANK(B2,B:B) という数式を入れフィル&コピーしています。 そしてE2セルに =SMALL(C:C,ROW(A1)) F2セルに =INDEX(A$1:A$50,SMALL(IF(C$1:C$50=E2,ROW(A$1:A$50)),COUNTIF(E$2:E2,E2))) これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合は、 上記数式をドラッグ&コピー → F2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま) Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 最後にE2・F2セルを範囲指定 → F2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 こんな感じではどうでしょうか?m(_ _)m=

turibaka_a
質問者

お礼

お礼が遅くなりまして申し訳ございませんでした。 上手くいきました。。。 ありがとうございます!!

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、元の表がSheet1上にあり、Sheet3のA列とC列を作業列として使用して、Sheet2に別表を表示させるものとします。  まず、Sheet3のA列に、全ての店名を「あいうえお順(A~Zの若い順)」に並べたリストを作成して下さい。  次に、Sheet3のC2セルに次の関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$A:$A,ROW())<>"",ISNUMBER(INDEX(Sheet1!$C:$C,ROW()))),IF(COUNTIF($A:$A,INDEX(Sheet1!$A:$A,ROW())),INDEX(Sheet1!$C:$C,ROW())*10000000+MATCH(INDEX(Sheet1!$A:$A,ROW()),$A:$A,0),""),"")  次に、Sheet3のC2セルをコピーして、Sheet3のC3以下に貼り付けて下さい。  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet3!$C:$C),"",INDEX(Sheet1!$A:$C,MATCH(SMALL(Sheet3!$C:$C,ROWS($2:2)),Sheet3!$C:$C,0),COLUMNS($A:A)))  次に、Sheet2のA2セルにをコピーして、Sheet2のB2~C2の範囲に貼り付けて下さい。  次に、Sheet2のA2~C2の範囲にをコピーして、同じ列範囲の3行目以下に貼り付けて下さい。  これで、Sheet2上に別表が表示されます。

turibaka_a
質問者

お礼

お礼が遅くなって申し訳ございませんでした。 丁寧な説明ありがとうございます、無事解決しました。 ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

たとえばA1からA26に「重複していない」店名を記入 B1:B26に数字を記入 B列が一番大きいと1位という風に大きい方から順位を付けているとして C1に =COUNTIF(B:B,">"&B1)+SUMPRODUCT(($A$1:$A$26<A1)*($B$1:$B$26=B1))+1 と記入,C26までコピーすると「重複しない順位」が計算できるので,1から5までINDEX(MATCH)で取って下さい。 #補足 >「あいうえお順(A~Zの若い順)」で表示できれば 読み仮名順で計算したいときは,ふりがな列を別途設けて,そちらで計算して下さい。

turibaka_a
質問者

お礼

お礼が遅くなりましてもうしわけございませんでした。 無事解決いたしました。 ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一案です。 ランク関数に少し手を加えてみてはどうでしょうか? ↓の画像でC2セルに =RANK(B2,B:B)+ROW()/1000 という数式を入れオートフィルで下へコピー! そして「小数点以下の表示桁数を減らす」で整数表示にしています。(赤丸部分) 最後にF2セルに =INDEX(A:A,MATCH(SMALL(C:C,ROW(A1)),C:C,0)) という数式を入れオートフィルで下へコピー! これで画像のような感じになります。m(_ _)m

関連するQ&A

専門家に質問してみよう