『TOP100のランキング』(dsk)
お世話になります。 以下のような記録表を作り、その順位表を作りたいです。ピボットテーブル を使ってやろうとしましたが、表の見栄えが悪いので、関数で作りたいと思 っています。
A B C D Q R S U V
1 no 名前 ふりがな 記録 順位 no 名前 ふり 記録 2 1 吉田 よしだ 15.3 1 2 北村 14.2 3 2 北村 きたむら 14.2 2 1 吉田 15.3 4 3 中村 なかむら 20.5 . 5 4 森口 もりぐち 0.0 . . . . 100 . 351 350 島村 しまむら 19.2
数字の小さいほうが上位です。不参加は記録が0なので0はランキングから省 きたいです。
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows11 >
追記: RANK関数で順位を出すことはできますが、数字が小さいほうが上位なので不参加の『0』が1位になってしまい ます。 (dsk) 2025/03/10(月) 19:57:52
すいません。わかりにくかったようですね。
A B C D Q R S U V
1 no 名前 ふりがな 記録 |順位 no 名前 ふり 記録 2 1 吉田 よしだ 15.3 | 1 2 北村 14.2 3 2 北村 きたむら 14.2 | 2 1 吉田 15.3 4 3 中村 なかむら 20.5 | . 5 4 森口 もりぐち 0.0 | . . | . . |100 . 351 350 島村 しまむら 19.2
A列からD列に参加者の記録を記入していき、Q列からV列の表に記録の数値の少ない順に並べたいのです。
(dsk) 2025/03/10(月) 20:09:28
それとは別に一案ですが、リアルタイムで更新する必要がなければ、
オートフィルタで記録列を昇順ソートしてから「0.0」のチェックを外し、
コピペした後、フィルター解除とかでどうですか。
元表を戻すには、no列を昇順ソートすれば良いですし。
(S.K) 2025/03/10(月) 20:16:15
同一記録の人は、タイ順位で処理できればいいです。リアルタイムで更新したいですし、【記録】は他のデータの集計から数値が出ているので数式が入っていますので、0のままでいきたいです。 ややこしいことを言ってすいません。 (dsk) 2025/03/10(月) 20:22:12
=IF(D2=0,"",RANK(D2,$D$2:$D$351,1))-COUNTIF(D$2:D$351,0)で順位を出すことはできました。 しかしながらここから順位で並び替える方法がわかりません。
A B C D Q R S U V
1 no 名前 ふりがな 記録 |順位 順位 no 名前 ふり 記録 2 1 吉田 よしだ 15.3 | 2 3 2 北村 きたむら 14.2 | 1 4 3 中村 なかむら 20.5 | 3 5 4 森口 もりぐち 0.0 |
ここまでできました。 R列に一位から順に並べていきたいです。
(dsk) 2025/03/10(月) 20:49:46
>数式が入っていますので、0のままでいきたいです。
0ではなく「""」が返るように、D列の式を変更したらどうですか? どんな数式か分かりませんが、難しいことではないでしょう?
D列の式を変更すれば R列:ナンバー S列:名前 V列:記録
V2:=IF(COUNTIF($D$2:$D$351,"<="&SMALL($D$2:$D$351,100))<ROW(A1),"",SMALL($D$2:$D$351,ROW(A1))) 下にコピー
R2:=IF($V2="","",INDEX(A:A,AGGREGATE(15,6,ROW($D$2:$D$351)/($D$2:$D$351=$V2),COUNTIF($V$2:$V2,$V2)))) S2にコピー R2:S2を下にコピー
順位はRANK関数で (かんたんレシピ) 2025/03/10(月) 21:32:58
記録 V2:=IFERROR(AGGREGATE(15,6,$D$2:$D$351/($D$2:$D$351<=SMALL($D$2:$D$351,100)),ROW(A1)),"") でも (かんたんレシピ) 2025/03/10(月) 22:34:11
すいません。いろいろ試しましたが、やはりうまくいきません。
A B C D E F G H I J K L M N O P Q R S T U V
1 no 名前 かな 記録 1st 1stの記録 2sd 2sd記録 3rd 3rdの記録 順位 |順位 no 名前 かな 記録 2 01 吉田 12 5 5 6 16 4 4 4 12 8 4 4 16 2位 | 3 02 北村 18 7 7 7 21 4 7 7 18 8 6 6 20 4位 | 4 03 中村 10 3 3 5 11 4 4 4 16 3 3 4 10 1位 | 5 04 森口 12 9 9 9 27 8 8 8 24 7 5 7 12 2位 |
まずDの記録はE〜Pの3回の試技の最小値が記録になります。=SMALL((H2,L2,P2),SUM(H2=0=0,L2=0,P2=0,1))で最小値を求めいていますので、不参加が“0”がで 記録されてしまいます。 Qの順位は=IFERROR(IF(D2=0,"",RANK(D2,$D$2:$D$5,1))-COUNTIF(D$2:D$5,0),"")で出すことができました。 Rより右側に、上位から並べたいと考えています。VLOOKUPでやったら同一記録の表示ができませんでした。 かんたんレシピさんの数式でもうまくいかなかったのですが、まず、記録0の所を""で返す方法が思いつかなくて、列を増やしてIFでやることはできましたが、そのあとがわかりません。 できたら列を増やさずに記録0を""にしたいのですがわかりませんでした。 よろしくお願いします。
(dsk) 2025/03/11(火) 08:12:36
上手く行くかわかりませんけどポストします。 アフターフォローは出来ませんので、ダメなら別の回答をお待ちください。
Q2 =IF(D2=0,1000,RANK(D2,$D$2:$D$351,1))-COUNTIF(D$2:D$351,0)+ROW()/9^7 R2 =IF(SMALL($Q$2:$Q$351,ROW(A1))>350,"",SMALL($Q$2:$Q$351,ROW(A1))) S2 =IFERROR(INDEX($A$2:$D$351,MATCH($R2,$Q$2:$Q$351,0),COLUMN(A1)),"")
Q2,R2は下へ、S2は右・下へ必要数分フィル 必要に応じてセルの書式設定を変更(少数の桁数) (S.K) 2025/03/11(火) 08:25:13
追記:当初の投稿の元表(0.0の表示あり)に対しての回答です。 (S.K) 2025/03/11(火) 08:27:00
ついでの質問なんですが、1位の数字が『1.00000041815032』みたいに端数が出ているのはなんででしょうか?ROW()/9^7のために端数でるのかな? あとROW(A1)とCOLUMN(A1)がA1のnoの所を指しているのですがどういう意味ですか? めんどうな質問 申し訳ございません。後学のために教えてください。
(dsk) 2025/03/11(火) 08:41:53
>記録0の所を""で返す方法
D2:=IFERROR(TEXT(SMALL((H2,L2,P2),SUM(H2=0,L2=0,P2=0,1)),"0.0;;")*1,"") (かんたんレシピ) 2025/03/11(火) 10:27:43
お世話になります。 先ほど初めてこの表を使うのがGooleスプレッドシートであることを聞かされました。3人で一度に使うらしいです。 ここでこんなことを質問するのはお門違いかもしれませんが、以下の数式がGooleスプレッドシートだとERRORになります。
=SMALL((H2,L2,P2),SUM(H2=0=0,L2=0,P2=0,1)) =IF(D2=0,1000,RANK(D2,$D$2:$D$351,1))-COUNTIF(D$2:D$351,0)+ROW()/9^7 =IF(SMALL($Q$2:$Q$364,ROW(A1))>363,"",SMALL($Q$2:$Q$364,ROW(A1)))
Gooleスプレッドシートでこの表を使用するのは不可能なんでしょうか? (dsk) 2025/03/11(火) 15:52:56
まずはヘルプを確認することではないですか? 調べたうえでの質問なんでしょうか。 (xyz) 2025/03/11(火) 19:52:29
既にご指摘ありますが、以下のことは、 ヘルプやWeb検索することで、容易に知ることが出来る内容です。
>ROW()/9^7のために端数でるのかな? そうです。Rank関数で求めた値をユニーク(一意)なものにする為に加算しています。
>あとROW(A1)とCOLUMN(A1)がA1のnoの所を指しているのですがどういう意味ですか? ROW関数とCOLUMN関数は引数に指定したセル番地の、ROW関数なら行番号、COLUMN関数なら列番号をそれぞれ返します。 =ROW(B5) なら「5」が、=COLUMN(B5) なら「2」がそれぞれ返ります。 式中で(A1)と相対参照で指定する事により、フィルした際に1ずつ加算させることができます。
>Googleスプレッドシート エラーになるのは参照範囲が違うからでは? 少ないサンプルで試しただけですが、以下の数式で行けてるような気がします。
Q2 =IF(D2=0,1000,RANK(D2,$D$2:$D$364,1))-COUNTIF(D$2:D$364,0)+ROW()/9^7 R2 =IF(SMALL($Q$2:$Q$364,ROW(A1))>500,"",SMALL($Q$2:$Q$364,ROW(A1))) S2 =IFERROR(INDEX($A$2:$D$364,MATCH($R2,$Q$2:$Q$364,0),COLUMN(A1)),"")
Googleスプレッドシートは畑違いなので、私はここまでといたします。 (S.K) 2025/03/11(火) 20:01:08
>TOP100のランキング 上位100人だけの抽出ではないのですか?
>=SMALL((H2,L2,P2),SUM(H2=0=0,L2=0,P2=0,1)) H2=0=0の意味がわかりませんが、 この式をD2セルに入れてみました。
D H L P 1 1st 2nd 3rd 2 0 0 15.3 13.7
D2は0になります。 それでいいのでしょうか?
>S2 =IFERROR(INDEX($A$2:$D$364,MATCH($R2,$Q$2:$Q$364,0),COLUMN(A1)),"")
=IFERROR(INDEX(A$2:A$364,MATCH($R2,$Q$2:$Q$364,0)),"") COLUMNを使っていませんが、同じ結果を得られると思います。 (かんたんレシピ) 2025/03/12(水) 09:15:44
xyzさん 今までヘルプが役に立ったためしがないのであきらめてました。でもGeminiさんに聞いたら解決しました。質問する前に調べないとだめですね。反省します。
S.Kさん 非常に勉強になりました。丁寧にありがとうございます。
かんたんレシピさん 上位100人までのつもりでしたが、全員の順位が出ても問題はないので特に気にしていませんでした。 H2=0=0の意味は分かりませんが、試しにH=0にすると#NUM!になります。なんか必要なんでしょうが私にはわかりません。 D列は =SMALL((H2,L2,P2),SUM(H2=0=0,L2=0,P2=0,1))でなんでかわかりませんが0になりませんでした。なんででしょう?わからんだらけですが、皆様のおかげでEXCELが使えてます。
皆様のおかげで解決し完成いたしました。ありがとうございます。
(dsk) 2025/03/12(水) 09:32:14
>D列は =SMALL((H2,L2,P2),SUM(H2=0=0,L2=0,P2=0,1))でなんでかわかりませんが0になりませんでした。
こちらではH2が0の場合、L2とP2が0以外でも、D2は0になりました。 (かんたんレシピ) 2025/03/12(水) 16:27:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.