• 締切済み

関数について教えて下さい。

駆け足の記録会タイムをグループ(年齢)別に順位(名前)を別シートへ反映させるにはどうしたら良いのでしょうか。 同タイムで走った場合は、年齢の高い人が上位になるようにしたいです。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答2です。 遅くなってごめんなさい。 E1セルには項目名のチーム名などの文字列を入力しておくことが必要ですし、H1セルには数値などが入力されていてはエラーの原因となります。H1セルは空白のセルにしておきます。 タイムの列に空白のセルや0などが入力されていることでもエラーとなりますね。0の入力は無いようにすることとタイムの記録が無い場合には空白のセルにします。その上でH2セルへの入力の式を次のような式にして下方にドラッグコピーしてはどうでしょう。 =IF(ROW(A1)<=COUNTA(E:E)-1,IF(F2="","",IF(COUNTIF(E$2:E2,E2)=1,ROUNDDOWN(MAX(H$1:H1),-3)+1000+F2-C2/10^9,ROUNDDOWN(INDEX(H$1:H1,MATCH(E2,E:E,0)),-3)+F2-C2/10^9)),IF(ROW(A1)<=COUNTA(E:E)-1+INT(MAX(H$1:H1)/1000),(ROW(A1)-COUNTA(E:E)+1)*1000,""))

suiren-7-7
質問者

お礼

遅くなりもうしわけございません。 体調不良により入院しており、お礼が遅れてしまいました。 投稿して頂いたとおりやってみます。ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

お示しのようにシート1のG列にもグループごとに順位を並べるとなりますと操作が煩雑となりますので作業列を作って対応してはどうでしょう。 H列及びI列を作業列としてH2セルには次の式を入力して下方にドラッグコピーします。 =IF(ROW(A1)<=COUNTA(E:E)-1,IF(COUNTIF(E$2:E2,E2)=1,ROUNDDOWN(MAX(H$1:H1),-3)+1000+F2-C2/10^9,ROUNDDOWN(INDEX(H$1:H1,MATCH(E2,E:E,0)),-3)+F2-C2/10^9),IF(ROW(A1)<=COUNTA(E:E)-1+INT(MAX(H$1:H1)/1000),(ROW(A1)-COUNTA(E:E)+1)*1000,"")) 順位を示すG2セルには次の式を入力して下方にドラッグコピーします。 =IF(F2="","",RANK(H2,H:H,1)-RANK(ROUNDDOWN(H2,-3),H:H,1)) また、作業列としてI2セルには次の式を入力して下方にドラッグコピーします。 =E2&G2 H列やI列は作業列ですからそれらの列を選択して右クリックし、「非表示」を選択することで非表示にすることもできます。 お求めの表ですがシート2に作るとしてB1セルから右横の列にはチーム名を入力します。 A2セルから下方には1位、2位、3位、などと入力します。 B2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR($A2="",B$1=""),"",IFERROR(INDEX(Sheet1!$B:$B,MATCH(B$1&ROW(A1),Sheet1!$I:$I,0)),""))

suiren-7-7
質問者

お礼

遅くなりもうしわけございません。ありがとうございます。 教えて頂いたとおりしたのですが、私のやり方が悪いのか順位の部分とI列に#N/Aと表示されどうする事も出来ない状態になってしまいました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

集計表シートの順位を表示するG2セルに以下の式を入力して、年齢で重みを付けた順位を表示しておきます。 =RANK(F2,$F$2:$F$100,2)-C2/10^9 一覧を表示するシートのB2セルに以下の式を入力して右方向および下方向にオートフィルします。 =INDEX(集計表!$B:$B,MATCH(SMALL(INDEX((集計表!$E$2:$E$100<>B$1)*1000+集計表!$G$2:$G$100,),ROW(A1)),集計表!$G:$G,0))

suiren-7-7
質問者

お礼

MackyNo1様 お礼が遅れ申し訳ございません。 これで上司にも納得して頂けます。 本当にありがとうございました。

関連するQ&A