Excel用函数计算排名与百分比的写法
讲清Excel里算排名和百分比的常用函数:RANK.EQ、RANK.AVG、PERCENTRANK.INC,以及占比、增长率的公式写法,附操作步骤和核对方法,适合成绩、销售和报表场景。
如果你手上有一列成绩、一张销售明细表,别人常问两件事:这个数在整体里排第几,它占总数的多少。很多人先想到排序后肉眼对照,数据一多就容易漏行或看错。用 Excel 函数可以把这两件事一次算完,数据改了结果也会自动更新。
这篇写给已经会写基本公式、想专门解决排名和百分比问题的读者。读完你能分清几种排名函数的区别,写出占比、百分位和增长率的公式,并知道结果出错时该检查哪里。
排名和占比虽然都是“比较”,但对应的函数和写法并不相同。下面先给出结论,再按步骤操作。
怎么用函数算排名和百分比?一句话结论
排名用 RANK.EQ 函数,占比直接写除法并把总和区域用绝对引用固定,需要“超过多少比例数据”的说法时则用 PERCENTRANK.INC。
| 你的情况 | 推荐做法 | 原因 |
|---|---|---|
| 只想知道每个数在列中排第几,并列可以接受 | =RANK.EQ(B2,$B$2:$B$11,0) | 并列名次相同,之后名次跳过,与常见排行榜习惯一致 |
| 并列时希望取平均名次 | =RANK.AVG(B2,$B$2:$B$11,0) | 并列值取平均名次,适合需要精细区分的比较 |
| 想知道某个值处于整体的什么位置 | =PERCENTRANK.INC($B$2:$B$11,B2) | 返回 0 到 1 之间的百分位,适合成绩分位、同类比较 |
| 求某一项占全部的比例 | =B2/SUM($B$2:$B$11) | 直接得到占比,设为百分比格式后便于阅读 |
| 计算同比、环比增长 | =(C2-B2)/B2 | 新值减旧值再除以旧值,结果为负表示下降 |
开始之前:先确认这几点
- 数字是否真的是数字。文本格式的数字不会参与排名和求和。可以选中单元格看是否靠左对齐,或者用 COUNT 函数统计数值个数,个数少于数据行数就说明有文本。
- 排名方向。RANK.EQ 的第三个参数写 0 或省略时为降序,即数值大的排在前面;写 1 为升序。成绩、销售额通常用降序,耗时、误差等通常用升序。方向选错,整列名次都会反过来。
- 区域是否锁定。排名和求和的区域必须用$固定,比如$B$2:$B$11。否则向下复制公式时区域会跟着移动,结果会悄悄出错。
- 分母包含哪些行。占比的分母要包含全部参与比较的对象。如果表格底部已有合计行,应把它排除在区域之外,否则总和会翻倍,占比会偏小。
- 数据从哪里来。如果数据在 PDF 表格里,可以先用 OmniDoc 桌面客户端的 PDF 编辑器导出为 Excel,再做计算。扫描件要先做 OCR 识别,而 OCR 可能把数字识别错,导出后务必逐个核对。
在 Excel 里用函数算排名和占比的步骤
- 整理数据。把要比较的数值放在同一列,例如 B2 到 B11,表头放在第 1 行,区域内不要夹杂合计、备注或空白行。
- 输入排名公式。在 C2 单元格输入=RANK.EQ(B2,$B$2:$B$11,0),回车后得到这一行的名次。
- 向下填充。拖动 C2 右下角的填充柄到 C11,每一行都会引用同一个固定区域。
- 输入占比公式。在 D2 输入=B2/SUM($B$2:$B$11),SUM 先算出总和,$符号确保分母不随行移动,再向下填充。
- 设置百分比格式。选中 D 列,把单元格格式设为百分比,并按需要保留一位或两位小数。格式只影响显示,单元格里的值仍是小数,后续计算不受影响。
- 计算百分位。在 E2 输入=PERCENTRANK.INC($B$2:$B$11,B2)并向下填充。结果可以理解为:约有这一比例的数据小于该值。若需要精确计数,可改用=COUNTIF($B$2:$B$11,"<"&B2)/COUNT($B$2:$B$11)。
做完后逐项核对
| 检查项 | 怎么看 | 有问题怎么办 |
|---|---|---|
| 名次方向 | 用 MAX 函数取出该列的数值上限,对照名次为 1 的行 | 若不对,检查 RANK.EQ 第三个参数是否符合需要 |
| 并列情况 | 找两个相同数值,看它们的名次是否一致 | 需要平均名次时改用 RANK.AVG |
| 占比合计 | 对占比列用 SUM 求和,结果应接近 1(即显示为全部) | 偏离较多时检查区域是否漏行或包含了合计行;小幅偏差可能来自小数舍入 |
| 数字类型 | 用 COUNT 统计数值个数,应等于数据行数 | 数量不足说明有文本数字,转换为数值后重新计算 |
| 公式是否错位 | 抽查最后一行的公式,看是否仍引用$B$2:$B$11 | 若区域变了,重新输入带$的绝对引用 |
| 错误值 | 查看是否出现#DIV/0!或#N/A | #DIV/0!多因总和为 0;#N/A 多因为查询值超出区域的上下限 |
📊 核心对比
常见的排名和百分位方法有四种,适用场景不同:
| 方法 | 结果形式 | 并列如何处理 | 适合场景 |
|---|---|---|---|
| RANK.EQ | 整数名次 | 并列名次相同,下一名次跳过 | 排行榜、名次公示 |
| RANK.AVG | 可能是小数 | 并列取平均名次 | 需要细分并列情况的比较 |
| PERCENTRANK.INC | 0 到 1 之间的小数 | 按位置插值计算 | 分位、同类对比 |
| COUNTIF 计数法 | 整数名次 | 并列同名次,与 RANK.EQ 一致 | 想理解排名原理,或不便使用新函数时 |
COUNTIF 计数法的公式为=COUNTIF($B$2:$B$11,">"&B2)+1,它统计比当前值大的数量再加 1,逻辑透明,便于手工验算。
❓ 常见问题(FAQ)
1. RANK 和 RANK.EQ 有什么区别?
RANK 是为兼容旧版本保留的函数,计算结果与 RANK.EQ 相同。新做的表格建议使用 RANK.EQ,名称更明确,也便于与 RANK.AVG 区分。
2. 占比加起来不等于 1,是哪里出了问题?
常见的原因是分母区域没有锁定,或者区域中包含了合计行。检查 SUM 的范围是否为完整的数据区域,并确认没有把合计值算进去。如果只差零点几个百分点,多半是小数舍入造成的。
3. 我想要耗时越短排名越靠前,应该怎么写?
把 RANK.EQ 的第三个参数改为 1,即升序排列,数值小的会得到靠前的名次,例如=RANK.EQ(B2,$B$2:$B$11,1)。
4. 怎样把结果说成“超过了多少人”?
用 COUNTIF 统计小于该值的人数,再除以总人数,即=COUNTIF($B$2:$B$11,"<"&B2)/COUNT($B$2:$B$11),设为百分比格式即可。这个结果比 PERCENTRANK.INC 更直观,适合直接对外说明。
📝 总结
Excel 怎么用函数计算百分比,关键在于两点:排名用 RANK.EQ,占比用“单值÷总和”,并且把区域用$固定住。设置百分比格式只是为了阅读,结果确认无误后再使用,能减少很多返工。


