这公式解释起来太费劲了,涉及到好多函数的用法。
LEN字符长度函数,INDIRECT文本字符串引用函数,ROW行号函数,ROW(INDIRECT("1:"&LEN(A1)))返回从1开始到字符数个数的行号,电话号码位数不会太多,比如11位,可以直接用ROW($1:$11)替代,公式简短些。
FIND查找字符出现的位置函数,这里就是查找数字出现的位置,为防止数据中找不到相应的数字时出现错误值,将单元格内容用“&”人为合并上0~9的数字,MIN最小值函数,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890))就是第一个数字出现的位置。
MID提取指定位置指定个数的数据,MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1)))),从查找到的最小位置开始,依次取1个、2个……到文本总字符个数的字符数,这样取出来的字符不管是否为数值,都是文本格式,前面加个--,将文本型数字转换为数值格式,当然,如果不是数字,则为错误值。
LOOKUP 函数从单行或单列区域中查找一个值,条件是向后兼容性,也就是取最后一个符合条件的数据,由于9E+307(9乘10的307次方)在EXCEL中是最大的数值,是查不到这个值的,会返回最后一个查到的值,如果字符中含有123,--MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW(INDIRECT("1:"&LEN(A1))))的结果是{1;12;123;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},所以整个公式的结果将返回123这个数值。
这个公式常常不用查找9E+307的方法,而是在MID前加一个-,不是加两个--,将文本型数字直接转换为负数,而后查找非负数,比如1,反正也查不到,再在LOOKUP前加一个-,负负得正转换为正数,比如最长11位,公式可为:=-LOOKUP(1,-MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW($1:$11)))
最后要说明的是,可以查找超过11位,但是结果会显示为科学记数法,此时就要转为文本格式,才能完全显示:=-LOOKUP(1,-MID(A2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&1234567890)),ROW($1:$18)))&""