Chiquilin Site■05.08.03_Excel:点数の重複がないランキング表を作る

その1:点数表を作成する
その2:点数表を元にして点数のベスト5を抽出
その3:条件付書式を使って数値を色に置き換える
こちらも今や必要のないページです。Office365なら
■E3セル
 =INDEX(UNIQUE(SORT(C3:C12,,-1)),SEQUENCE(5))
■F3セル
 =TRANSPOSE(FILTER(B3:B12,C3:C12=E3))
 F7セルまでオートフィルコピー
で済みます。ここから下は古いExcelのお話です。

その1:点数表を作成する

点数の重複を省く場合、[フィルタオプションの設定]を使うのが一般的です。ただ、これを使うと元データと別に重複を省いた表を別途作成する必要が生じます。ついでに[フィルタオプションの設定]は 同シート内にしか抽出できません。元の表からそのままランキング表が作れたら便利だと思いませんか?
点数表
こんな表からランキング表を作成します。見れば分かりますが「鈴木」と「佐藤」/「渡辺」と「伊藤」に点数の重複が見られます。この中から点数の上位5個を抜き出すことにします。
ページの一番上へ

その2:点数表を元にして点数のベスト5を抽出

順位別に点数を抽出する場合 LARGE関数を使えば簡単ですが 重複が入ってしまいます。これを解消する場合 作業列を使う方法があります。
■D1セル
  =IF(COUNTIF(C$3:C3,C3)=1,C3,"")
  フィルハンドルをダブルクリック
D列を基準にすれば LARGE関数で重複のない点数を抜き出すことができます。作業列を使う方法については 以前に作成した 作品(表計算大会2005 出品 Q3b.xls) を参考にして下さい。因みにこの表では結合して作業列を隠してますので見た目では分からないとは思います。
 
とりあえず今回は 作業列は使いません。
ランキング表
■E3セル
 =IF(COUNT(C3:C12),MAX(C3:C12),"")
■E4セル
 =IF(E3="","",IF(E3=MIN(C$3:C$12),"",SMALL(C$3:C$12,RANK(E3,C$3:C$12,1)-1)))
 E7セルまでオートフィルコピー
エラー処理が入っているので難しく見えるかもしれませんが まずE3セルにC列の最大値「100」を計算します。次に RANK関数で「100」の「昇順の順位」を出します。この場合「9」が返ります。10個あるデータの中で最大値の順位が下から「9」番目ということですから「100」がふたつあることがここからでも分かります。後は SMALL関数を使って下から「8」番目の数値を抜き出してやれば 重複を省いた順位が完成します。意外と簡単ですね。
ページの一番上へ

その3:ベスト5に該当する人の抽出

ではちょっと最後に味付けしましょう。成績上位者の抽出です。これは配列数式を使います。
該当者の抽出
■F3セル
 =IF(E3="","",IF(COUNTIF($C$3:$C$12,$E3)<COLUMN(A1),"",INDEX($B$3:$B$12,
SMALL(IF($C$3:$C$12=$E3,ROW($1:$10)),COLUMN(A1)))))
 Ctrl + Shift + Enter で確定
 H7セルまで縦横方向にオートフィルコピー
ちなみに ここではベスト5までしか抽出していませんが 随時下方向にコピーして追加することもできます。ついでにいうなら 名前も右方向にコピーすることで重複が3名を越えた場合にも対応します。
あと単なる出不精ですが 「Ctrl + Shift + Enter」が面倒な私は下記の数式を使います。
■F3セル
 =INDEX($B:$B,11-LARGE(INDEX(($C$3:$C$12=$E3)*11-ROW($3:$12),0),
COLUMN(A1)))&""
 普通に Enter で確定
 H7セルまで縦横方向にオートフィルコピー
これも逆転の発想で SMALLではなく LARGEを使います。この方法だと 普通に Enter で確定でできますし抽出対象が文字列であれば エラー対策が短くなります。意味が分かりにくいのが珠に傷ですが……
→参考ファイル(011.xls) 06.03.10修正
ページの一番上へ
ChiquilinSite トップページへ  Copyright(C) Chiquilin_site. All Rights Reserved.
inserted by FC2 system