- ベストアンサー
Excel関数で順位を求める方法
- Excel2000での順位の求め方に関して質問があります。関数を使用して科目1の順位、性別が1の場合の科目1の順位、性別が1かつ科目2が10以上の場合の科目1の順位を求める方法を教えてください。
- Excel関数を使用して、特定の条件に基づいて順位を求める方法について質問があります。具体的には、科目1の順位を求める方法、性別が1の場合の科目1の順位を求める方法、性別が1かつ科目2が10以上の場合の科目1の順位を求める方法を教えてください。
- Excel2000での順位を求める方法について質問があります。関数を使用して、科目1の順位、性別が1の場合の科目1の順位、性別が1かつ科目2が10以上の場合の科目1の順位を求める方法を教えていただけますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
【方法その1】関数と作業列を使う方法 今仮に、「連番」と入力されているセルが、Sheet1のA1セルであるものとします。 まず、適当な使用していないシート(ここでは仮にSheet2とします)のA2セルに、次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX(Sheet1!$C:$C,ROW())),INDEX(Sheet1!$B:$B,ROW())=1),INDEX(Sheet1!$C:$C,ROW()),"") 次に、Sheet2のB2セルに、次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX(Sheet1!$C:$C,ROW())),INDEX(Sheet1!$B:$B,ROW())=1,ISNUMBER(INDEX(Sheet1!$D:$D,ROW())),INDEX(Sheet1!$D:$D,ROW())>=10),INDEX(Sheet1!$C:$C,ROW()),"") 次に、Sheet2のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 次に、Sheet1のF2セルに、次の数式を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet2!$A:$A,ROW())),RANK(INDEX(Sheet2!$A:$A,ROW()),Sheet2!$A:$A),"") 次に、Sheet1のG2セルに、次の数式を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet2!$B:$B,ROW())),RANK(INDEX(Sheet2!$B:$B,ROW()),Sheet2!$B:$B),"") 次に、Sheet2のF2~G2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 以上です。 【方法その2】作業列を使用せず、関数のみで処理を行う方法(但し、表の行数が、数千行以上もある場合には、計算処理に要する負荷が大きくなります) 今仮に、「連番」と入力されているセルがA1セルであるものとします。 まず、F2セルに、次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX($C:$C,ROW())),INDEX($B:$B,ROW())=1),SUMPRODUCT(ISNUMBER($C$1:INDEX($C:$C,MATCH(MAX($C:$C)+1,$C:$C)))*($B$1:INDEX($B:$B,MATCH(MAX($C:$C)+1,$C:$C))=1)*($C$1:INDEX($C:$C,MATCH(MAX($C:$C)+1,$C:$C))>=INDEX($C:$C,ROW()))),"") 次に、G2セルに、次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX($C:$C,ROW())),INDEX($B:$B,ROW())=1,ISNUMBER(INDEX($D:$D,ROW())),INDEX($D:$D,ROW())>=10),SUMPRODUCT(ISNUMBER($C$1:INDEX($C:$C,MATCH(MAX($C:$C)+1,$C:$C)))*($B$1:INDEX($B:$B,MATCH(MAX($C:$C)+1,$C:$C))=1)*ISNUMBER($D$1:INDEX($D:$D,MATCH(MAX($C:$C)+1,$C:$C)))*($D$1:INDEX($D:$D,MATCH(MAX($C:$C)+1,$C:$C))>=10)*($C$1:INDEX($C:$C,MATCH(MAX($C:$C)+1,$C:$C))>=INDEX($C:$C,ROW()))),"") 次に、F2~G2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 以上です。
その他の回答 (2)
- don9don9
- ベストアンサー率47% (299/624)
No.1です。 作業列を使いたくないのであれば F2に =IF(B2=1,SUMPRODUCT(($B$2:$B$6=1)*($C$2:$C$6>C2))+1,"") G2に =IF(AND(B2=1,D2>=10),SUMPRODUCT(($B$2:$B$6=1)*($D$2:$D$6>=10)*($C$2:$C$6>C2))+1,"") と入力して下方向に複写で可能かと思います。 No.2さんの【方法その2】だと、同点で1位が2人いた場合、2人とも2位になります。
お礼
ありがとうございます。ご指摘の通りです。 これから色々なデータで確認いたします。 このアドバイスはとても参考になりました。
- don9don9
- ベストアンサー率47% (299/624)
空いている列を作業列として使うのが簡単だと思います。 例えばH列に =IF(B2=1,C2,"") I列に =IF(AND(B2=1,D2>=10),C2,"") という式を入れると、H列は結果2、I列は結果3の条件に合致する行だけ 同じ行のC列の値(=科目1の点数)が入るはずです。 このH列、I列の値に対してRANK関数を使えばいいです。 ちなみにH列やI列に""が入っている行はRANK関数を普通に使うと#VALUE!エラーを返します。 =IF(H2<>"",RANK(H2,H:H),"") このような形でエラー回避をしてください。 作業列が見栄え的に邪魔であれば、列自体を非表示にすればいいです。
お礼
ありがとうございます。 やはり、分解するしかないのですか・・・・・ でも、確実ですね。
お礼
早々にありがとうございます。 思いの通りの結果ができました。 失礼ながら「すばらしい」と言わせて下さい。