excel字符串设置( 二 )


这个公式与上一篇文章《Excel从字符串中提取数字——数字位于字符串开头》中的公式1相似 , 只是使用RIGHT函数代替了LEFT函数 。
当然 , 如果单元格A1中的字符串与“JAN18”、“123E4”类似 , 则不会返回正确的结果 , 详细原因参见上篇文章 。
RIGHT、MATCH与ISNUMBER
公式3:
=0+RIGHT(A1,MATCH(FALSE,ISNUMBER(0+MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”& LEN(A1))),1)),0)-1)
这是一个数组公式 。
仍以单元格A1中的数据为“ABC456” , 公式3可转换为:
=0+RIGHT(“ABC456”,MATCH(FALSE,ISNUMBER(0+MID(“ABC456”,1+6-ROW(INDIRECT(“1:”& 6)),1)),0)-1)
转换为:
=0+RIGHT(“ABC456”,MATCH(FALSE,ISNUMBER(0+MID(“ABC456”,1+6-{1;2;3;4;5;6},1)),0)-1)
转换为(注意 , 这里是如何将得到的数组颠倒 , 从而使得从字符串的末尾到开头逐个获取字符成为可能):
=0+RIGHT(“ABC456”,MATCH(FALSE,ISNUMBER(0+MID(“ABC456”,{6;5;4;3;2;1},1)),0)-1)
转换为:
=0+RIGHT(“ABC456”,MATCH(FALSE,ISNUMBER(0+{6;5;4;C;B;A}),0)-1)
通过适当的数学运算(将数组与0相加) , 强制数字字符转换成数字:
=0+RIGHT(“ABC456”,MATCH(FALSE,ISNUMBER({6;5;4;#VALUE!;#VALUE!;#VALUE!}),0)-1)
ISNUMBER函数忽略传递给其参数中的错误值:
=0+RIGHT(“ABC456”,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE},0)-1)
转换为:
=0+RIGHT(“ABC456”,4-1)
其中的4表示在字符串“”中第一个非数字字符自右向左出现的位置 , 减1表示数字字符出现的位置:
=0+RIGHT(“ABC456”,3)
结果为:
456
下面 , 我们来看看字符串中除末尾以外的数字会不会影响最终的结果 。例如如果单元格A1中的数据是“123ABC456” , 那么公式3可以转换为:
=0+RIGHT(“123ABC456”,MATCH(FALSE,ISNUMBER(0+MID(“123ABC456”,1+LEN(“123ABC456”)-ROW(INDIRECT(“1:”& LEN(“123ABC456”))),1)),0)-1)
转换为:
=0+RIGHT(“123ABC456”,MATCH(FALSE,ISNUMBER(0+{“6”;”5”;”4”;”C”;”B”;”A”;”3”;”2”;”1”}),0)-1)
转换为:
=0+RIGHT(“123ABC456”,MATCH(FALSE,ISNUMBER(6;5;4;#VALUE!; #VALUE!; #VALUE!;3;2;1}),0)-1)
转换为:
=0+RIGHT(“123ABC456”,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE},0)-1)
转换为:
=0+RIGHT(“ABC456”,4-1)
其中的4表示在字符串“”中第一个非数字字符自右向左出现的位置 , 减1表示数字字符出现的位置:
=0+RIGHT(“ABC456”,3)
结果为:
456
可以看到 , 由于是从右向左取数 , 因此在字符串的其它位置存在数字并不会影响结果 。
RIGHT、MATCH与ISERR
公式4:
=0+RIGHT(A1,MATCH(1,0+ISERR(0+MID(A1,1+LEN(A1)-ROW(INDIRECT(“1:”& LEN(A1))),1)),0)-1)
这是一个数组公式 。
以单元格A1中的数据为“123ABC456” , 公式4可转换为:
=0+RIGHT(“123ABC456”,MATCH(1,0+ISERR(0+{“6″;”5″;”4″;”C”;”B”;”A”;”3″;”2″;”1″}),0)-1)
转换为:
=0+RIGHT(“123ABC456”,MATCH(1,0+{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE},0)-1)
转换为:
=0+RIGHT(“123ABC456”,MATCH(1,{0;0;0;1;1;1;0;0;0},0)-1)
转换为:
=0+RIGHT(“123ABC456”,4-1)
转换为:
=0+RIGHT(“123ABC456”,3)
结果为:
456
与公式3一样 , 字符串中除末尾有数字外其它部位存在数字时不影响结果 。

推荐阅读