code函数是一个超级转换器 根据ABCD等级的变化,判断等级升降情况
问题求助SOS:如何根据ABCD等级的变化,判断升降情况?
这个问题的提干很简单,非常容易描述。
如下图所示:
A列是8月份的各等级信息,B列是8月过渡到9月时,等级的变化情况,我们想要判断一下,9月相对于8月,等级是上升了,或者是下降了,还是没有变化。
比如等级由B→B,等级未发生变化;等级由C→D表示等级下降;等级由D→A表示等级上升。
这个问题的主旨思路是非常简单的,没有任何难度,重点在于如何比较ABCDEFG等英文字母的大小,我们通多比较“字母”的大小就完全可以判断等级的升降情况了。
这里我们要介绍的就是CODE函数了。
CODE函数是Excel或WPS表格中用于获取文本字符串中第一个字符数字代码的函数。
语法:
=CODE(text)
参数text为要获取数字代码的文本字符串。
比如:=CODE("A") 返回65(字母A的ASCII码);=CODE(A1) 若A1单元格内容为“B”,则返回66。
一般情况下,我们经常会对三类数据使用到转换:
数字字符(0-9):48-57
大写字母(A-Z):65-90
小写字母(a-z):97-122
所以我们经常用CODE函数作为一个转换器,间接实现对数据排序与比较,也就是说将文本转换为数字代码后进行排序或比较。
我们容易忽视的一点是:
若需要处理的文本是一串字符串(多个字符组成),则仅返回第一个字符的代码,若需获取多个字符代码,需多次使用。如果是对空字符串使用会返回错误值。
第一步:提取9月等级
使用TEXTAFTER函数:
=TEXTAFTER(B2,"-")
将默认的第一个分隔符“-”后面的内容提取出来,也就是9月的等级信息。
第二步:字母等级转代码
使用CODE函数:
=CODE(TEXTAFTER(B2,"-"))
将获取到的9月份的字母等级转换为数字代码。
第三步:代码比较
根据大写字母(A-Z)所对应的代码依次是65-90,是由小到大顺序排列的。也就是字母越靠前,代码越小。
所以我们进行减法运算比较:
=CODE(TEXTAFTER(B2,"-"))-CODE(A2)
用9月的字母代码减去8月的字母代码。
由此总结:
当差值大于0时,说明9月的字母在8月的字母后面,表示降级;
当差值小于0时,说明9月的字母在8月的字母前面,表示升级;
当差值等于0时,表示等级不变。
一般情况下,我们会使用IF或IFS条件判断函数进行判断:
=IFS(
CODE(TEXTAFTER(B2,"-"))-CODE(A2)>0,"升级",
CODE(TEXTAFTER(B2,"-"))-CODE(A2)<0,"降级",
CODE(TEXTAFTER(B2,"-"))-CODE(A2)=0,"不变")
或:
=IF(CODE(TEXTAFTER(B2,"-"))-CODE(A2)>0,"升级",
IF(CODE(TEXTAFTER(B2,"-"))-CODE(A2)<0,"降级",
"不变"))
但是我们发现,虽然逻辑很简单,但是公式很冗长,我们都喜欢公式越短越好。
我们可以利用TEXT函数的特殊格式用法:
=TEXT(A1,"正数;负数;零")
此方法通过TEXT函数的格式代码实现,分号分隔的三段分别对应大于0、小于0、等于0的情况。
所以我们将公式改成下面形式即可:
=TEXT(CODE(TEXTAFTER(B2,"-"))-CODE(A2),"降级;升级;不变")
TEXT(A1,"大于0的结果;小于0的结果;等于0的结果")
是不是公式长度短了不少呢?