- ベストアンサー
EXCELの式がわかりません。
RANK関数で順位を付けているのですが、ある種目(A列の数)で同点の場合、例えば1番、1番その次が3番になりますが、その同順の場合、さらに条件を付けて、他の種目(B列の数)での数が多いほうで決着し、同順にはさせないようするには、どうすればいいですか?以下のとおりです。宜しくお願いします。 セル A B C(RANKの順位)D(求めたい順位) 1 10 8 3 3 2 12 9 1 1 3 11 7 2 2 4 10 6 3 4
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
たびたび、すみません。 #7で *はAND +はORとして扱われます。 と書きましたが、ちょっと違うみたいです。 #5の解説の通り、Trueは1、Falseは0で掛け算、足し算してます。 わかりにくい説明をしてすみません。
その他の回答 (7)
- taisuke555
- ベストアンサー率55% (132/236)
A B C ←列 順位 1 10 8 1 2 2 12 9 3 5 3 11 7 4 4 4 10 6 2 3 5 12 8 6 6 6 10 8 3 1 ↑ 行 のような感じでよいですか? 複雑になってきたので、RANK関数使っていません。(前の質問もRANK関数使わずにできます。) D1セルに =SUMPRODUCT(($A$1:$A$6<A1)+($A$1:$A$6=A1)*(($B$1:$B$6>B1)+($B$1:$B$6=B1)*($C$1:$C$6>C1)))+1 *はAND +はORとして扱われます。 A1~A6で A1より小さい または A1~A6で A1と同じ かつ (B1~B6で B1より大きい または B1~B6で B1と同じ かつ C1~C6で C1より大きい) 条件のセルがいくつあるか数え、+1(その次の順位)としています。 間違っていたら補足してください。
- taisuke555
- ベストアンサー率55% (132/236)
#2、#5で回答したものです。 補足です。 *1を書いてあった理由は 例えば、A1~A4の中にA1と同じ値がいくつあるかを求めたい場合、 =SUMPRODUCT($A$1:$A$4=A1) ではTrue又はFalseを加算しようとしてうまくいきません。 そこで、 =SUMPRODUCT(($A$1:$A$4=A1)*1) とするとTrue=1,False=0に変換して数字として計算してくれます。 今回の数式も論理式のみでしたので必要かな?と思い付けましたが、 掛け算をしようとした段階で、変換してくれるようなのではずしました。 こんな感じで私もいつも試行錯誤しながら数式を作成してます。
補足
ご回答有難うございます。ご説明で何となくバカな私もわかったのですが、実は求めたい順位が、条件がもうひとつあって、つまりセルAの得点、セルBの得点、セルCの得点の3つの条件があるのですが、Aの得点では、一番少ない点数が上位、同点の場合はBの得点の多い方が上位、さらに同点の場合、Cの得点の多い方が上位という順位付けになっているのですが、前回説明が長くなると思って簡素化し、taisuke555さんの式を変形してやってみたのですが、うまくいきません。たび重ねて申し訳ありませんが、お分かりでしたら、お教えください。
- taisuke555
- ベストアンサー率55% (132/236)
今、試してみたところ =RANK(A1,$A$1:$A$4)+SUMPRODUCT(($A$1:$A$4=A1)*($B$1:$B$4>B1)) で大丈夫みたいです(*1をはずしました。) >素人にもわかりやすく、日本語訳で 式の解説をしていただけたら、幸いです。 分かりやすく説明ができるか不安ですが、解説してみます。 RANK関数の方はよろしいですね。 =SUMPRODUCT(($A$1:$A$4=A1)*($B$1:$B$4>B1)) は =(A1=A1)*(B1>B1)+(A2=A1)*(B2>B1)+(A3=A1)*(B3>B1)+(A4=A1)*(B4>B1) と同様の意味です。 ($A$1:$A$4=A1)→(A1=A1),(A2=A1),(A3=A1),(A4=A1) A1~A4でA1と同じ値のセルはTrue、違う場合はFalseが返ります。 ($B$1:$B$4>B1)→(B1>B1),(B2>B1),(B3>B1),(B4>B1) 同様にB1~B4でB1より大きい値のセルはTrue、同じか小さい場合はFalseが返ります。 その2つの論理式を掛けると True=1、False=0という数字になって計算されます。 よって、 True * True = 1*1 = 1 True * False = 1*0 = 0 False * True = 0*1 = 0 False * False = 0*0 = 0 と、両方がTrueの場合のみ1となります。 その計算をA1~A4(B1~B4は対)まで計算し、結果を足し算しています。 同様の数式に配列数式(式を入力後[Enter]のかわりに[Ctrl]+[Shift]+[Enter]) =SUM(($A$1:$A$4=A1)*($B$1:$B$4>B1)) というのもあります。(解説はまったく一緒です。) 書いていてもうまく説明できていない事がわかりますが、説明が難しいです。 >劣等感や嫌悪感を感じます。 ご覧のように文章を作るのは(人に説明するのは)まったくだめです。 私にも1つ位、とりえがあってもよいと思いますので そんな風に考えず、分からない所は分からないで質問し、分かる所を教えていってお互い成長しましょう! 長文の割には的を得ない回答ですみません。
- imogasi
- ベストアンサー率27% (4737/17069)
まあ出きると言うことで (1)空き列に順番に上から1,2,3・・をオートフィルで振る。(仮にC列) (2)データ-並べ替え 第1キー-A列降順,第2キーB列降順でソート (3)ソート後のデータに上行から1,2,3・・・と オートフィルで番号を振る(仮にD列とする。) (4)(1)のC列で昇順にソート D列が順位になっています。 エクセルを使わない(使えない)、オフラインバッチ処理プログラムなどは、この方法(ソートを使う)を使うと思います。即ちシステム的には汎用性のある方法と思います。
お礼
ご回答くださいまして、本当に有難うございました。また、何かわからないことがありましたら、宜しくお願い致します。
- souta_n
- ベストアンサー率33% (79/234)
ちょっとずるい方法ですが、こんな感じでどうでしょう。 C1の数式=RANK(A1,$A$1:$A$4,1)*100+A1+B1 D1の数式=RANK(C1,$C$1:$C$4) 後は下方向にフィルで複写してください。 こうすると D列に求めたいランクが算出できます。C列はD列の計算の中間過程なので、見苦しかったら、非表示にでもしておいてください。
お礼
ご回答くださいまして、本当に有難うございました。また、何かわからないことがありましたら、宜しくお願い致します。
- taisuke555
- ベストアンサー率55% (132/236)
C1セルに =RANK(A1,$A$1:$A$4)+SUMPRODUCT(($A$1:$A$4=A1)*($B$1:$B$4>B1)*1) でどうですか? A列が同じで、B列が大きい数がいくつあるか数え加算しています。
お礼
ご回答くださいまして、本当に有難うございました。また、何かわからないことがありましたら、宜しくお願い致します。
補足
早速のお答え有難うございます。教えてくださった式をそのまま貼り付けて見たのですが、まず完璧な式のようですが、よくぞ、このような式がすぐわかるものだと、つくずく感心し、どうして私はこんな頭がないのだろうと劣等感や嫌悪感を感じます。素人にもわかりやすく、日本語訳で 式の解説をしていただけたら、幸いです。
- Hageoyadi
- ベストアンサー率40% (3145/7860)
ご質問のケースなら、たとえば C1=A1+B1/10として D1=RANK(D1,$C$1:$C$4) でご希望通りになります。
お礼
ご回答くださいまして、本当に有難うございました。また、何かわからないことがありましたら、宜しくお願い致します。
お礼
taisuke555さん、何回もお返事くださって、本当に有難うございます。貴重なお時間を割いていただいて、申し訳ないですm(__)m。完璧なお答えでした。驚きで私は、すごいなーとただ感心するだけです。今回は大変お世話になりました。今後のご活躍を祈念いたします。それではまた、どこかでお世話になると思います(^^)/~~~