这不是简单地提取手机号码,思维最重要!
首先亮出一个问题,如下图:
要提取A1:A2单元格里面的手机号码。任何时候面对问题先要分析一下问题,然后再找解决方法。仔细看看这组数据,手机号码的位数是一定的,为11位。所以想到了MID提取函数。接下来就是使用其他函数来配合使用了。
法一:
目前我国手机号码的第一位数字是1,故利用FIND函数查找数字1来定位手机号码的起始位置,然后利用MID函数来连续提取11个字符即可。不过此法是有一定缺陷的,就是当手机号码之前出现数字1的时候就不再适用了,所以这个用法限制性比较大,不过也算是一种方法吧~
法二:
此法利用MID(A1,ROW($1:$50),11)*{0,1}生成了一个两列的内存数组,同时只保存提取到的数字,内存数组的第一列是错误值和0,第二列是提取的连续11位字符和错误值,为了方便理解,我把生成的内存数组列出来:
{#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;0,18824678951;0,8824678951;0,824678951;0,24678951;0,4678951;0,678951;0,78951;0,8951;0,951;0,51;0,1;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!;#VALUE!,#VALUE!}
ROW($1:$30)是为了保证能够把手机号码提取到而设置的,事实上只要大于源字符串的长度-10个字符即可。最后利用VLOOKUP函数第一参数省略(相当于等于0)来查找第一个出现的0对应的连续11位字符串(仔细想想其实就是我们想要的手机号码)。由于公式生成了内存数组,故需要用三键结束。不过此法也有缺陷,假如说源字符串在手机号码之前出现了一个连续的11位数字就呵呵了,例如:燕山区10008610008栋18826478951。
法三:
这个公式我们要知道这一部分的公式MID(A1,ROW($1:$30),11)返回的结果:
{"燕山区7栋188246";"山区7栋1882467";"区7栋18824678";"7栋188246789";"栋1882467895";"18824678951";"8824678951";"824678951";"24678951";"4678951";"678951";"78951";"8951";"951";"51";"1";"";"";"";"";"";"";"";"";"";"";"";"";"";""}
我们用两个负号处理这部分时,会把所有文本型文本变为错误值:
{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;18824678951;8824678951;824678951;24678951;4678951;678951;78951;8951;951;51;1;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
然后用错误函数IFERROR把错误值全部换为0,得到下面的结果:
{0;0;0;0;0;18824678951;8824678951;824678951;24678951;4678951;678951;78951;8951;951;51;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
最后用MAX函数提取就好啦,由于公式生成了内存数组,别忘了用三键结束噢。~不过此法严格上来说也不是最严谨的,假如说源字符串还存在大于我们手机号码的数字就不行了,例如:燕山区999999999栋18826478951。
通过以上的三个方法小编希望大家在遇到问题的时候先观察一下数据,不能说某种方法是万能的是通用的,正如上面的每一种方法都有缺陷一样,这点真的真的非常重要,请重视这个思维方式,具体问题具体分析!