• ベストアンサー

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

  • EXCELのIF関数の入れ子について

    すみませんよろしくお願いします。 EXCELでセル(A1)~(L1)までに不特定の文字列が入力されており、(M1)に「もし(L1)が入力されていたら(L1)の値を表示、もし(L1)がブランクなら(K1)の値を表示、もし(K1)がブランクなら(J1)の値を表示、もし(J1)がブランクなら(I1)の値を表示・・・・」といった具合で関数を作成したいのです。また、(A1)~(L1)のセルで穴あき状態で入力されていた場合は最も(L1)寄りのセルを表示させたいです。 EXCEL2003のIF関数だと、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="","",E2),F2),G2),H2),I2),J2),K2),L2) で最後の(A1)までの入れ子を作ることができせん。 EXCEL2007を使用すると、 =IF(L2="",IF(K2="",IF(J2="",IF(I2="",IF(H2="",IF(G2="",IF(F2="",IF(E2="",IF(D2="",IF(C2="",IF(B2="",IF(A2="","",A2),B2),C2),D2),E2),F2),G2),H2),I2),J2),K2),L2) と作成できます。 EXCEL2003で作成するいい方法はありますでしょうか? ご指南の程よろしくお願いします。

  • if関数について

    if関数についてどなたか教えてください。 ある二つの名簿があって、二つの名簿を照合して名寄せをしたいのですが、たとえば、A列の1行目から10行目まで、同じくB列の1行目から10行目まで氏名が入っているとします。A列とB列に同じ名前が入っていれば、C列に○印をつけるように関数を設定したいのです。自分なりに考えて、次のようにif関数を設定しました。・・・がうまく表示されません。エラーは出ませんので、関数としては成り立っていると思うのですが、○印が表示されません。どなたか間違いを指摘いただけませんでしょうか? C1のセルに次の関数を設定して、C10までコピーをしました。 if(A1=$B$1:$B$10,”○”,””) よろしくお願いいたします。

  • 入れ子式の関数(IF)を使って 「0」 を表示させない方法

    パターン(1)⇒これならできます! --A-B-C-D-E-F 1-@-@-@-@-@ 2-@-@-@-@-@ 3-@-@-@-@-@ 4---------- 5-@-@-@-@-@ パターン(2)⇒行3のような飛び飛びのデータが入ると私の実力でできません --A-B-C-D-E-F 1-@-@-@-@-@ 2-@-@-@-@-@ 3----@-@-@- 4---------- 5-@-@-@-@-@ 上の表、わかりにくいと思いますが、F列にSUM関数でF1=IF(A1="","",SUM(A1:E1))とし、F1~F5まで連続コピーをして、A~Fまでが空白の行の合計を「0」表示させたくないのですが、パターン(2)のような場合、「A1="","",」のかわりにどの範囲を指定すれば、入れ子の関数を使って、F列に「0」表示させないことができるのでしょうか。 また簡単な違ったやり方はおありでしょうか。 説明がわかりにくいかもしれませんがよろしくお願いします。

  • sumif関数とif関数と配列の使い方

    例えば、下記のように9行×3列のデータがあり、1列目が123かつ2列目がcであるものについて3列目を合計したいのですが(つまり300+600で900を算出する)、1セルに値を算出する方法があれば教えてください。 sumif関数とif関数と配列を使えばできそうな気がするんですが、やり方がよくわかりません。よろしくお願いします。 123  a  100 123  b  200 123  c  300 456  a  1000 456  b  2000 456  c  3000 123  a  400 123  b  500 123  c  600

  • IFの入れ子7個以上をEXCEL2003で使いたい

    EXCEL2003でIFの入れ子が7個までしか使えませんが、 関数またはVBAを使って7個以上の入れ子を機能させるには どうしたらいいでしょうか。 やりたいことは、ピボットテーブルで使いやすいように 文字列データを別の列にコピーしたいのですが、 元データにはいろいろな文字列が順不同で入っており、 それを取り出すのにIFの入れ子を多様しています。 たとえばこんなデータなのですが、 商品番号 商品タグ          売上金額 No1    ■果物■りんご       1000 No2    ■野菜■きゅうり      2000 No3    ■果物■みかん       1000 No4    ■野菜■にんじん      2000 No5    ■果物■りんご       1000 No5    ■果物■りんご       1000    No6    ドリンク          1000    商品タグには 大カテゴリ 果物、野菜 中カテゴリ 果物の場合、りんご、みかん       野菜の場合、きゅうり、にんじん と分類されています。 一つのセルに大カテゴリと中カテゴリの両方が入ります。 これを中カテゴリをキーにしてピボットテーブルで集計したい場合、 下記の様もう一つ列を作り、そこに集計したいものだけが入った データを作らなければなりません。    A     B             C     D 1商品番号 商品タグ          売上金額 中カテゴリ 2No1    ■果物■りんご       1000   りんご 3No2    ■野菜■きゅうり      2000   きゅうり 4No3    ■果物■みかん       1000   みかん 5No4    ■野菜■にんじん      2000   にんじん 6No5    ■果物■りんご       1000   りんご 7No6    ドリンク          1000   その他 商品タグは実際にはこの前後にたくさんの文字列があり、 文字数も決まっていませんので、文字列を取り出すには search関数やmid関数などを使って取り出しています。 また、取り出したい文字列が含まれていない場合は すべて「その他」と入力したいのです。 セルD2には下記の式を入れています。 =IF(ISERROR(MID(B2,SEARCH("■りんご",B2),3)=TRUE), IF(ISERROR(MID(B2,SEARCH("■みかん",B2),4)=TRUE), IF(ISERROR(MID(B2,SEARCH("■きゅうり",B2),5)=TRUE), IF(ISERROR(MID(B2,SEARCH("にんじん",B2),5)=TRUE),"その他","にんじん"),"きゅうり"),"みかん"),"りんご") これをIFの入れ子7個以上でも使えるようにするには、どうしたらいいでしょうか。

  • if関数とVLOOKUP関数について

    if関数とVLOOKUP関数について エクセル2003で以下のような表を2枚 (シート1とシート2です)作成しています。 上段がシート1で、左上「NO」からA1セルに なっています。 下段がシート2で、特別番号が付番される 人の対象者リストで、「氏名」 がA1セルです。 図が乱れてすいません。 シート1のB列の売上日、C列の氏名は 別ファイルから貼り付けています。 シート2は、特別番号を付番する人の 氏名リストですが、ここでは、便宜上 小文字のアルファベットにしています。 ここでしたい処理ですが、売上日及び氏名を シート1に貼り付けた際に、特別番号対象者 (シート2のリストに挙がっている人) が入ってきたとき、自動的にシート1の A列のNOの列に「特別番号」 との文言を表示させたいのです。 実際に数字を表示するのではなく、 「特別番号」の文字列を表示させたいです。 IF関数とVLOOKUP関数でできると思うのですが よくわかりませんでしたので、教えてください。 NO 売上日 氏名 1 1月1日 A 2 1月2日 B 特別番号 1月3日 a 特別番号 1月4日 b 特別番号 1月5日 c 3 1月6日 D 4 1月7日 E 特別番号 1月8日 e 特別番号リスト(シート2) 氏名 住所 a 東京都 b 大阪府 c 神奈川県

  • VLOOKUP関数とIF関数の組み合わせ

    はじめまして。 質問なのですが、セルに列とサイズを入力して用紙寸法一覧表を参考にして「大きさ」をセルに寸法を表示させる問題に困っています。 ヒントにはIF関数を使うと書かれています。 どなたかお願いできますでしょうか?  A   B   D 2 列   __(下の表から自分で入力) 3 サイズ __ 5 大きさ □ × □ ●用紙寸法一覧表(単位:ミリ)   F    G    H     I     J 2 サイズ  A列       B列 3  0  841  1189 1030 1456 4  1  594  841  728   1030 5  2   420   594   515   728 6  3   297   420   364   515 7  4   210   297   257  364 8  5  148   210   182   257 9  6  105   148   128   182 10  7   74    105   91   128 11  8   52    74    64   91 12  9    37   52   45    64 13  10   26   37   32   45 きちんと説明できているかわかりませんがよろしくお願いします。

  • エクセルのIF関数の使い方について

     こんにちわ。仕事で成績の評価表の作成をしたくて、エクセルで表を作成しました。    表は、  Aのセル・・・氏名 Bのセル・・・テストの点数 Cのセルが平常点          Dのセル・・・BとCのセルを合計した合計点数          Eのセル・・・成績評価  Fのセル・・・合計点数による順位    という表を作成しました。    Eのセルに Dのセルの合計点数を基準として 5段階の評価をつけたい。    条件が、 85点以上が5、60点以上が4、50点以上が3、35以上が2、1~34点までが1    =IF の関数 =IF(論理式、真の場合、偽の場合) というのを使用すればいいのは   わかったんですが、いまいち関数式の取り方、書き方がわからなくて・・・本をみて記入して   みたんですがエラーになります。   どうしたら評価を自動転記することができるか、教えてください。   また点数をもとに順位をつける方法も教えて欲しいです。よろしくお願いします。

  • エクセル関数 入れ子の作り方 コピー可能?

    エクセル関数の入れ子の作り方で教えてください。 IF関数が3つ入れ子になる状態を作りたいのですが、 一つ一つのIF関数の式が長いので、動作を確認するために、 とりあえず3つのセル(A1,A2,A3)に一つずつ作ってみました。 この時A1,A2の偽の値には仮に”偽”と入れて作ってあります。 それぞれのIF関数は正しく出来ていたので、A3の式をA2の偽の値へ、 A2の式をA1の偽の値へ、と入れ子にしたいです。 コピーして貼り付けたいのですが上手くいきません。 ちなみに数式は A1 =IF(AND(K31<>TRUE,K33<>TRUE,K35<>TRUE),"","偽") A2 =IF(AND(K35=TRUE,INDEX(H19:H24,K18)="-"),J37,"偽") A3 =SUM(IF(K31=TRUE,INDEX($F$19:$H$24,K18,1),0),IF(K33=TRUE,INDEX($F$19:$H$24,K18,2),0),IF(K35=TRUE,INDEX($F$19:$H$24,K18,3),0)) です。一つのセルですべての条件を満たす必要があり、他のセルは利用できないので、 なんとしても入れ子にしなくてはなりません。 すべてを打ち込みしないとダメでしょうか? 検索してみましたがヒット出来ませんでした。 どうかよろしくお願いします。

  • エクセルの関数を使ってランキングをつけています

    ある表を元に、ランキングをつけています 元になる表は B列 C列 D列 E列 担当者名 本日売上 今月累計 先月累計 Aさん 10000円 100000円 90000円 Bさん 9000円 90000円 80000円 Cさん 8000円 80000円 70000円 ~続く という風になっています ランキングの表は S4セルに「10」と入力し、書式設定で上位10位までを表示としています R列 S列 T列 順位 担当者 今月累計 1 Aさん 100000 2 Bさん 90000 3 Cさん 80000 4 5 6 7 8 9 10 となっています それぞれのセルに関数が入っていて、 R列には、=IF($S$4>=ROWS(R$7:R7),ROWS(R$7:R7),\"\") S列には、=IF($R7<=$S$4,OFFSET($B$3,MATCH(T7,$D$4:$D$54,0),0),\"\") T列には、=IF(R7<=$S$4,LARGE($D$4:$D$54,$R7),\"\") となっています これで今まではうまくいっていたんですが、 同じ数値がある場合に、ランキングの表に 同じ名前の人が2つ表示されたりしてしまいます。 原因を調べているのですが、わからなくて、 さらにIF関数を入れて何かしら指示をしなければいけないのかなと 思っているのですが、、すみません、 急いでいるので意味のわからない文章になっているかもしれませんが、 どなたか「これでは?」というひらめきがありましたら お手数ですがご指導お願い致します。

専門家に質問してみよう