找出excel表格中的某一列中的手机号码(或者连续11位数字),并复制到后面的一列中去
单元格A1中有如下内容:
提取Excel单元格中连续的数字的函数公式是:
=LOOKUP(9E+307,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890)),ROW($1:$8)))
解释一下这个公式
FIND函数——查询文本所在位置
FIND(find_text,within_text,[start_num])
FIND(需查找的文本,包含查找文本的单元格,开始查找单元格的字符位置(可选))
此处FIND函数是搜索{1,2,3,4,5,6,7,8,9,0}数字在“A1&1234567890”中所在的位置;
A1&1234567890的目的是在用FIND函数查询时,不出现错误值,使之后的MIN函数可以正常运行。
即FIND({1,2,3,4,5,6,7,8,9,0},“小王联系电话58670098负责财务1234567890”)
选取划黑后按F9,得出的位置为:{19,20,21,22,7,9,10,8,13,11}
MIN函数——返回列表中的最小值
MIN(number1,number2,……)
MIN(数字1,数字2,……)
将FIND所得结果{19,20,21,22,7,9,10,8,13,11}带入MIN函数,最小值所得为7,正是第一个数值出现的位置;
也正是之前FIND函数中使用A1&1234567890的原因。
MID函数——返回文本字符串从指定位置开始特定数目的字符,即提取某段字符。
MID(text,start_num,num_chars)
MID(被提取的文本或单元格,开始提取的字符位置,提取的字符个数)
将上述MIN函数所得带入MID(A1,7,ROW($1:$8);
ROW($1:$8)使用row函数不是用来计算行,而是借用其作为常量。当然1:8是可以修改的,只要大于数值个数就不影响结果。
--MID(……)中“--”的作用是将MID得出的结果变为数值,使其可以被LOOKUP函数查询到。
MID(……)选取划黑后按F9{"5";"58";"586";"5867";"58670";"586700";"5867009";"58670098"}
--MID(……)选取划黑后按F9{5;58;586;5867;58670;586700;5867009;58670098}
LOOKUP函数——从返回某个查询的值(数组形式)
LOOKUP(lookup_value,array)
LOOKUP(在数组中查找的值,数组范围区域)
很重要的一点:
如果 LOOKUP 找不到 lookup_value 的值,它会使用数组中小于或等于 lookup_value 的最大值。
LOOKUP(9E+307,……)其中9E+307指的是一个不会出现的超大值,9后面有307个0, 9E+307又可以写成9*10^307;那么此处搜索这个超大值,肯定无法找到,因此返回的内容将是小于或等于{5;58;586;5867;58670;586700;5867009;58670098}的最大值,即58670098。
假定原数据在A列
B1
=-LOOKUP(,-MID(A1,ROW(INDIRECT("$1:$"&LENB(A1))),11)) 按ctrl+shift+enter结束公式输入,下拉填充
假如数据在a1
=MID(A1,FIND("1",A1),11)
或者
=MIDB(A1,SEARCHB("?",A1),11)
B1输入公式
=if(len(a1)=11,a1,"")
下拉复制公式
我的数据在j列
应该在k1输入公式如下=if(len(j1)=j1,j1,"")吗?
如果是这样,没反应
=if(len(j1)=11,,j1,"")
广告 您可能关注的内容 |