こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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で最終的に使いたいと思ってます。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-12-27 01:04:35

QNo.5549854

困ってます

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

こんにちは!
当方使用のエクセル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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-12-27 09:49:39

お礼

tom04さま、この度はご回答ありがとうございます。
私のやりたいことをご理解頂き、count関数やROW関数まで明記しての表記には大変感謝して下ります。

ROW関数は何のことか分からなかったのですが、空欄を見事につめてくれるので重宝しました。

ご心配いただいた、「同順になってしまった場合」につきましては生年月日別での上位、やHC別の仕分けでまず、今のメンバーでは同順になることはありえないので問題ございません。

Docments To GoではROW関数を認識しなかったのでrows(a3:$a$3)
で対応できました。

こんなに早く解決できるとは思わなかったので嬉しいです。
どうもありがとうございます。

投稿日時 - 2009-12-27 14:25:38

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

図に無駄な部分が多くて見難いですが、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に対応してるといいですね。

投稿日時 - 2009-12-27 09:31:24

お礼

grumpy_the_dwarfさん、こんにちは。
回答ありがとうございます。
目からうろこです。分かりやすい解説のおかげでINDEX関数とMATCH関数もすこし理解できました。

おかげさまでDocuments To Goもきちんと動いており、大変満足しております。大変感謝しております。

投稿日時 - 2009-12-27 14:06:09

ANo.1

RANK関数で良いような気がするんですけど?

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

投稿日時 - 2009-12-27 01:22:20

お礼

解答ありがとうございます。晩い時間にもかかわらずお知恵を頂き感謝して下ります。

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関数を使うと出来そうなのですが、私の頭ではマニュアルを理解できようです。

どうぞ、再びお助け下さい。

投稿日時 - 2009-12-27 02:33:02

あなたにオススメの質問