• ベストアンサー

if関数の入れ子の制限で助けていただきたい。

 ゴルフのスコアー表を作っています。各々のメンバーのスコアーを算出し、ランキングを作成したのですが、順位がばらばらになってのランキングされます。そこで1位○●さん2位○△さん・・・最下位○×さんと並べ替えるのにIF関数を使いました。が、入れ子の数がオーバーしてしまい、並べかえられませ。スコアー表は50名分までエントリーできるようにしてあり、A列が会員ナンバーB列が氏名・・・J列が順位。 L列に1位からの並べかえた数字を入れてあり、それを参照するIF関数を=IF(J3=1,B3,if(j4=1,b4,if(j5=1,b5,if(j6=1,b6,if(j7=1,b7,if(j8=1,b8,if(j9=1,b9,if(j10=1,b10,if(j11=1,b11,if(j12=1,b12,if(j13=1,b13,"")・・・・・””)))))))))))))) としようと思ったのですが、どうやら入れ子は7つまでが限界らしいので困り果てました。 どうぞ、お助け下さい。 現在エクセル2000使用。 IPHONEのDocmento To Goで最終的に使いたいと思ってます。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 当方使用のエクセル2003の場合ですが、 結局順位別に氏名を表示させれば良いということですよね? ↓の画像ですでに、L列の順位は1から入力されているものとします。 M3セルに =IF(COUNT($J$3:$J$100)<ROW(A1),"",INDEX($B$3:$B$100,MATCH(L3,$J$3:$J$100,0))) (100行目まで対応できるようにしています) という数式を入れ、オートフィルで下へコピーしています。 こんな感じで良いのですかね? 尚、気をつけないといけないのは、同順位があった場合は 上の行を拾い出してしまいますので、下の行にある人はエラーになってしまいます。 とりあえず、同順位がないという前提での方法になります。 以上、参考になれば幸いです。m(__)m

masai703
質問者

お礼

tom04さま、この度はご回答ありがとうございます。 私のやりたいことをご理解頂き、count関数やROW関数まで明記しての表記には大変感謝して下ります。 ROW関数は何のことか分からなかったのですが、空欄を見事につめてくれるので重宝しました。 ご心配いただいた、「同順になってしまった場合」につきましては生年月日別での上位、やHC別の仕分けでまず、今のメンバーでは同順になることはありえないので問題ございません。 Docments To GoではROW関数を認識しなかったのでrows(a3:$a$3) で対応できました。 こんなに早く解決できるとは思わなかったので嬉しいです。 どうもありがとうございます。

その他の回答 (2)

回答No.2

図に無駄な部分が多くて見難いですが、J列になんとか順位を算出 したから、L列に並べた順位に従ってM列に名前を出したいってこと でいいでしょうか。 vlookupは使えません。あれは指定した範囲の左端の列しか検索出 来ないので、J列を検索してB列を返すことは不可能です。 で、ご推察の通りindex関数をmatch関数と組み合わせて使います。 match関数はたとえば=match(1,$J$3:$J$53,0)で1位の人が表のx番 目にいますよ、という値を返すので、index関数で表のx番目のB列 を=index($B$3:$B$53,x,1)のように取り出すわけです。 =index($B$3:$B$53,match(1,$J$3:$J$53,0),1) のような感じになりますね。 Documents To Goがmatchとindexに対応してるといいですね。

masai703
質問者

お礼

grumpy_the_dwarfさん、こんにちは。 回答ありがとうございます。 目からうろこです。分かりやすい解説のおかげでINDEX関数とMATCH関数もすこし理解できました。 おかげさまでDocuments To Goもきちんと動いており、大変満足しております。大変感謝しております。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

RANK関数で良いような気がするんですけど?  =RANK(数値,範囲,順序) と使います  =RANK(スコア,スコアの範囲,1) これで順位を付けられます あとはソート(並べ替え)するなり、LOOKUP関数を使うなりしてみてはいかがでしょう

masai703
質問者

お礼

解答ありがとうございます。晩い時間にもかかわらずお知恵を頂き感謝して下ります。 RANK関数ですが、Documento TO GOが対応しておらず、エントリー表で順位で解決したのがCOUNTIF(I3:I52,"<" & I3)+1で算出しています。 VLOOKUPも試したのですが、”順位”の列は=IF(+G3="","",COUNTIF(I3:I52,"<" & I3)+1)で算出しているためか、またはVOLOOKUP(l3=1、範囲、M3)に抽出の計算では出来ないです。多分、j列の値が計算式か、ソートされていない数字だからと思われます。 ソートに関しましてはj列はうまくいかないです。ましては、IFONEアプリがソート機能を持たないし、私的にはマクロの記述も出来るのですがiponeアプリがマクロも機能しないです。 INDEX関数を使うと出来そうなのですが、私の頭ではマニュアルを理解できようです。 どうぞ、再びお助け下さい。

関連するQ&A