質問: rankifのような関数ってありますか? こんにちは、 知り合いから聞かれたのですが、a列に出席番号、b列に生徒氏名、c列に国立文系、国立理系、私立文系、私立理系、就職・専門というように進路希望があります。 1組~8組のすべてのクラス(各40人)に、進路希望の異なる生徒がいます(単位制高校なので授業はクラス単位で行わないのでいろんな生徒がいるらしいです)。英語と国語は進路希望とは関係なく同じテストをするのですが、英語と国語の学年順位やクラス順位はすぐにrank関数で求められますが、国立文系の中での順位などを求める関数(やり方)はあるでしょうか? 私のアドバイスとしては、進路希望順にソートして、その中でrank関数を用いて順位を出すと答えたのですが、値複写しておかなければソートしなおしたときにおかしくなります。ただ値複写すると、採点ミスなどで点数が変わるたびに、やり直さなくてはいけません。 私ならvbaを用いて、配列を使って並べ替えて書き込むというやり方にすると思うのですが、質問者はvbaがわからないので関数で何とかできないでしょうか?
回答: d列に英語点数として 英語進路希望順位=sumproduct(($c$2:$c$321=$c2)*($d$2:$d$321>$d2))+1 解説 sumproduct関数は配列の積の和を求める関数ですが =sumproduct(条件1*条件2)とすることで複数条件のカウント関数として利用できます。 上記の場合=sumproduct(進路希望が同じ*自分よりいい点数)で 同じ進路の自分より上の順位の人数をカウントしますので その人数に+1することで自分の順位になります。