• ベストアンサー

ゴルフコンペの順位の件

Excel2007で、ゴルフコンペの順位のつけ方で教えてください。 F列にグロススコア、G列にハンデ、H列にネットスコアがあって、I列に   =IF(H2="","",RANK(H2,$H$2:$H$100,1)) を入れて順位をつけますが、このH列のネットスコアが同順位の場合は、 G列のハンデ上位者を順位の上に持ってきたいのですが、どのような関数を使えば良いか 教えて頂きたいと思います。 私、初心者レベルですのよろしくお願いします。

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

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

 今仮に、1行目には、「グロススコア」、「ハンデ」、「ネットスコア」等の項目名が並んでいて、実際のスコア等の数値は2行目以下に並んでいるものとします。  又、ハンデの数値は必ず100未満であり、ネットスコアの数値は、0.1単位で記録されていて、小数点以下第2位以下の桁数は記録には関係しないものとします。  まず、適当な列を作業列(計算処理を行うために必要な、計算の途中結果を記録するために、補助的に使用する列)として使用します。  ここでは仮にZ列を作業列として使用する事にします。  まず、Z2セルに次の数式を入力して下さい。 =IF(ISNUMBER($H2),$H2+$G2/1000,"")  次に、Z2セルをコピーして、Z3以下にあるセルに、競技者の人数を上回るのに充分な行数になるまで貼り付けて下さい。  次に、I2セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($H:$H),"",RANK($Z2,$Z:$Z,1))  次に、I2セルをコピーして、I3以下にあるセルに、競技者の人数を上回るのに充分な行数になるまで貼り付けて下さい。  尚、作業列は必ずしもZ列に設けなければならない訳ではありませんから、余分な表示が見えるのが見栄えが悪い場合には、作業列を別シートに移す事も出来ます。 Z列の上にある「Z」と表示されているマスに、マウスのカーソルを合わせて、マウスを右クリック   ↓ 現れた選択肢の中にある[切り取り]をクリック   ↓ ウィンドウの下端近くにある、各シート名が表示されているタグの中から、使用していないシートのタグにカーソルを合わせてクリック   ↓ 適当な列(通常はA列)の列番号を表しているマス(A列の場合はA)にカーソルを合わせて、マウスを右クリック   ↓ 現れた選択肢の中にある[切り取ったセルの挿入]をクリック  これで、元のシートのZ列を、別のシートに移動させる事が出来ます。  この時、同時に、他のセルに入力されている数式中の、Z列のセルを参照している部分も、自動的に新しい参照先に書き換えられますから、キーボード入力で数式を書き直す必要はありません。  それから、本件の場合は、少し高度な関数の応用技を使えば、作業列を使用せずに済ませる事も出来ます。  その一例としては、I2セルに次の数式を入力してから、I2セルをコピーして、I3以下にあるセルに、競技者の人数を上回るのに充分な行数になるまで貼り付けるという方法です。 =IF(ROWS($1:1)>COUNT($H:$H),"",,SUMPRODUCT(($H$2:$H$999+$G$2:$G$999/1000<$H$2+$G2/1000)*ISNUMBER($H$2:$H$999))+1)  尚、この数式は競技者の人数が998人を超える場合には対応しておりません。  万が一、競技者の人数が998人を超える場合には、数式中の 999 という部分を、競技者の人数よりも大きな数に書き換えるか、若しくは、次の(人数に制限の無い)数式に書き換えて下さい。 =IF(ROWS($1:1)>COUNT($H:$H),"",,SUMPRODUCT((OFFSET($H$2,,,MATCH(9^9,$H:$H))+OFFSET($G$2,,,MATCH(9^9,$H:$H))/1000<$H$2+$G2/1000)*ISNUMBER(OFFSET($H$2,,,MATCH(9^9,$H:$H))))+1,"")

noname#254063
質問者

お礼

Kagakusukiさん 素晴らしいです!バッチリできました。 大変ありがとうございます。 作業列の方でやりました、セルに直接入力の方はなぜかうまくいきませんでした。 この作業列の方で私は十分でございます。 とりあえずは厚くお礼申し上げます。

関連するQ&A