我正在将某条记录的排名与去年的排名进行比较:This year it is ranked 4th out of 50, in 2015 it was ranked 21st
。是否可以自动将“st”、“nd”、“rd”和“th”添加到排名中?
我的数据在表中:
- COL A = 数据点的名称(Bob、Jane、Bill、Anne 等)。这是固定列。
- COL B = 最新一年的数据,
- COL C = 最新一年排名,
- COL D = 上一年数据,
- COL E = 去年排名。
我很熟悉使用 IF 公式,但我不确定如何引用单元格中的最后一位数字并说:如果“它是 1 则为‘st’”,如果“它是 2 则为‘nd’”,如果“它是 3 则为‘rd’”,否则为‘th’。
请注意,排名可以是多位数字。字母基于最后一位数字。因此排名 31 是第 31 名。青少年也有例外。排名 11、12 和 13 使用“th”。
这可以用公式来完成吗?还是需要用 VBA 来完成?
答案1
以下假设“排名”位于单元格 B50”
=IF(B50=1,"st",IF(B50=2,"nd",IF(B50=3,"rd","th")))
以上结果将给出“st”、“nd”等
虽然我怀疑你也想显示数字,所以使用
=IF(B50=1,B50 & "st",IF(B50=2,B50 & "nd",IF(B50=3,B50 & "rd",B50 & "th")))
这将显示“1st”、“2nd”等结果
感谢 ejbytes 的评论,我没有测试 > 10!下面的代码片段可以做到这一点,因此您可以获得第 22 个或第 43 个等
=IF(RIGHT(B50,1) = "1", B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th")))
现在我们讨论 11、12 和 13 以及 111、112、113 等问题,所以我们需要处理这些问题!
=IF(RIGHT(B50,2)="11",B50 & "th",IF(RIGHT(B50,2)="12",B50&"th",IF(RIGHT(B50,2)="13",B50&"th",IF(RIGHT(B50,1)="1",B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th"))))))
最后,我们剩下 0......第 10 个,第 50 个,第 100 个,但我们还有 0!
=IF(B50=0,0,IF(RIGHT(B50,2)="11",B50&"th",IF(RIGHT(B50,2)="12",B50&"th",IF(RIGHT(B50,2)="13",B50&"th",IF(RIGHT(B50,1)="1",B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th")))))))
答案2
使用@Dave IF 公式我必须对我的数据表做一些修改。
识别最左边的数字意味着我需要添加另一个“辅助”列。
- A列为原始排名数字
- B 列是一个新的辅助列 =VALUE(RIGHT(A1,1)),它给出了最后一位数字。
C 列的公式为
=IF(A1=12,A1&"th",IF(A1=13,A1&"th",IF(B1=1,A1&"st",IF(B1=2,A1&"nd",IF(B1=3,A1&"rd",A1&"th")))))
我必须特别处理 12 和 13...因为英语!
有用,但可能会伤害眼睛。谢谢