ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 27588|回复: 30

[求助] 在Excel中进行中国式排名

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-11-9 23:24 | 显示全部楼层 |阅读模式
所谓中国式排名,是指排名时如果出现并列的情况,并列者不占用名次。例如有两个并列第2名,则下一个名次还是为第3 名,而不是排到第4 名,这似乎更符合中国人的习惯。而在Excel中用RANK函数排序时,并列者将占用名次,因而会导致后面有的名次会出现空缺。在许多情况下,我们可能要用到中国式排名。下面是几种进行中国式排名的方法:

    一、用辅助列

    在能够改变表格结构的情况下,可以先对表格按降序的方式排序,然后在辅助列中输入公式,获得中国式排名。

    如下图A1:D19区域中是某公司年度考核成绩表,总成绩在D列中,现在要对D列进行中国式排名。

     

    1.选择D2:D19列中的任一单元格,单击工具栏中的“Z→A”按钮,使总成绩按降序排序。

    2.在E2单元格中输入公式:

    =RANK(D2,$D$2:$D$19)

    然后向下拖,将公式填充到E3:E19区域。

    3.在F2单元格中输入数值“1”。然后在F3单元格中输入公式:

    =IF(E3=E2,F2,F2+1)

    然后向下拖,将公式填充到F3:F19区域,即可得到中国式排名。

    这种方法操作简单,无需复杂的公式,缺点是要使用辅助列。

    二、使用公式

    用下面的几个公式都可以获得中国式排名,还是以上图为例,在单元格中输入公式并向下拖:

    =SUMPRODUCT((D$2:D$19>D2)*(1/(COUNTIF(D$2:D$19,D$2:D$19))))+1

    或下面的几个数组公式,公式输入完毕后按Ctrl+Shift+Enter结束:

    =SUM(IF(D$2:D$19>D2,1/COUNTIF(D$2:D$19,D$2:D$19)))+1

    =SUM(--(FREQUENCY(D$2:D$19,IF(D$2:D$19>=D2,D$2:D$19))>0))

    =SUM(--IF(D$2:D$19>=D2,MATCH(D$2:D$19,D$2:D$19,)=ROW($2:$19)-1))

TA的精华主题

TA的得分主题

发表于 2009-11-10 04:53 | 显示全部楼层
兄弟,支持你给大家共享些知识的做法,不过这样东一个西一个恐怕没什么效果(比如我是没耐心一个一个看了),而且不会有人顶,立刻就沉了。
有心的话,不如整理到一起,再放上直观的示例文件,有机会弄个精华帖也说不定啊。

TA的精华主题

TA的得分主题

发表于 2009-11-10 09:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主为了排名,可谓费尽心机啊。
连match,frequecy都用上了,好贴好贴。

TA的精华主题

TA的得分主题

发表于 2009-11-10 09:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-6-4 13:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-6-28 09:39 | 显示全部楼层
第二种方法好复杂,还是第一个看起来简便

TA的精华主题

TA的得分主题

发表于 2010-7-1 16:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-8-26 10:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好,谢谢

TA的精华主题

TA的得分主题

发表于 2010-10-20 11:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-10-20 11:39 | 显示全部楼层
RANK函数的帮助文件不能解决楼主的问题吗?
RANK

请参阅

返回一个数字在数字列表中的排位。数字的排位是其大小与列表中其他值的比值(如果列表已排过序,则数字的排位就是它当前的位置)。

语法

RANK(number,ref,order)

Number    为需要找到排位的数字。

Ref    为数字列表数组或对数字列表的引用。Ref 中的非数值型参数将被忽略。

Order    为一数字,指明排位的方式。

如果 order 为 0(零)或省略,Microsoft Excel 对数字的排位是基于 ref 为按照降序排列的列表。
如果 order 不为零,Microsoft Excel 对数字的排位是基于 ref 为按照升序排列的列表。
说明

函数 RANK 对重复数的排位相同。但重复数的存在将影响后续数值的排位。例如,在一列按升序排列的整数中,如果整数 10 出现两次,其排位为 5,则 11 的排位为 7(没有排位为 6 的数值)。

由于某些原因,用户可能使用考虑重复数字的排位定义。在前面的示例中,用户可能要将整数 10 的排位改为 5.5。这可通过将下列修正因素添加到按排位返回的值来实现。该修正因素对于按照升序计算排位(顺序 = 非零值)或按照降序计算排位(顺序 = 0 或被忽略)的情况都是正确的。

重复数排位的修正因素 =[COUNT(ref) + 1 – RANK(number, ref, 0) – RANK(number, ref, 1)]/2。

在下列示例中,RANK(A2,A1:A5,1) 等于 3。修正因素是 (5 + 1 – 2 – 3)/2 = 0.5,考虑重复数排位的修改排位是 3 + 0.5 = 3.5。如果数字仅在 ref 出现一次,由于不必调整 RANK,因此修正因素为 0。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 23:37 , Processed in 0.043714 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表