|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
分享一个原创经验——妙用RANK.AVG带小数的名次,解决学校运动会“并列名次者平分所得分数”的问题
许多场景下,例如学校运动会,需要对每个名次的对象结算分数,例如第一名20分,第二名18分,第三名16分……以此类推。但一般情况下为了公平,同时保证分数的含金量,会采用“并列名次者平均分配这些名次对应的分数”的方式。此时RANK.AVG——这个会出现“带小数名次”、看似“很鸡肋”的函数就起了大作用,比RANK或RANK.EQ更优。
例如,第一到第八名分别算20/18/16/14/12/10/8/6分,但出现二三名并列了,此时二三名需要各得17分(把二三名对应的分数18和16平均分给这两位)。这种情况下,对比用RANK或RANK.EQ解决这个问题,你会发现RANK.AVG的便捷之处。
在本例中,分数=22-2*名次。
假设名次在B1:B8区域,要在C1:C8区域给出分数。若B列的公式为=RANK(B1,$B$1:$B$8,0),C列填入=22-2*B1,则B列会出现12245678,C列中两个2对应的分数都是18,结果是错误的。后续仍需手动修改,比较麻烦。
但若改用RANK.AVG则可以一步到位。将B列的公式改为=RANK.AVG(B1,$B$1:$B$8,0),C列填入=22-2*B1,则B列的两个2会显示为2.5,C列的对应值就是22-2*2.5=17,结果正确。 |
|