[[20250310191829]] 『TOP100のランキング』(dsk) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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

>数字の小さいほうが上位です。
表では逆
(?) 2025/03/10(月) 20:02:56

 すいません。わかりにくかったようですね。

    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

s.k様 うまくいきましたありがとうございます。

 ついでの質問なんですが、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.