Excel提取不规则单元格中的数据(从表格里面提取符合条件的数据)
今天,有伙伴问了小编这样一个问题,现有如下图所示的源数据,现需要将姓名和电话号码分别从源数据所在列提取出来:
看到这样的数据,单纯的提取函数肯定是没有办法了,之前分享的提取长度不一的提取函数 FIND的套路也无法使用了,那这样的问题该怎么解决呢?且看小编慢慢道来:
我们只需要在C2单元格内输入公式:=MID(A2,MIN(FIND(ROW($1:$10)-1,A2&"0123456789")),11)
公式输入完成之后,按Ctrl Shift 回车结束进行尝试,此公式则变为数组公式
函数解释:
1. ROW($2:$14)会得到{1;2;3;4;5;6;7;8;9;10},10个数字,而减去1,就会得到{0;1;2;3;4;5;6;7;8;9},刚好是阿拉伯数字的0-9。A2&”0123456789”就是”林明玉156958498650123456789”
2. FIND(ROW($1:$10)-1,A2&"0123456789")的意思就是在”林明玉156958498650123456789”中,分别找0-9这十个数字在其中的位置。
3. 因为位置序号最小的数字(即0-9中0所在的位置序号),即为号码字段开始的第一个字符。所以我们用MIN函数判断出数字在字符串中最小的位置,即为数字开始的位置,作为MID函数的第二参数。最后再用MID函数提取出11位数字即为需要的电话号码
4. 看到这,有的小伙伴或许会发出属于自己的声音了,为什么要让A2连上数字”0123456789”?。小编告诉你,那是因为不可能所有电话号码都会包含完整的0-9这10位数字,当没有在A2单元格内找到对应数字时,FIND函数就是返回错误值,整个公式就会失去作用。所以为了避免这种情况,我们需要在A2后面脸上数字”0123456789”
当你可以理解上述原理之外,就可以在原公式的基础上对公式进行简化:
=MID(A2,MIN(FIND(ROW($1:$10)-1,A2&5/19)),11)
从上图可以看出,这次 A2 后面连接的就不在是数字 ”0123456789” 了,而是看上去更简单的 5/19 。其实原理和上面一样, 5/19=0.2631578947 ,这个结果刚好包含了数字 0-9 ,和上面的直接连接 0-9 是一样的效果
通过上一步骤,我们就可以提取出完整的电话号码,接下来,就只需要用SUBSTITUTE函数在数据区域中,将提取出来的电话号码替换为空,就可以了