Excel中提取字符串的常见形式有以下三种:第一,从原有文本中截取一部分用于形成新的文本;第二,文本和数字分离;第三,提取文本中的数字。
提取字符串的常用函数有left(rihgt)、mid、substitute等等。LEFT函数是从左向右提取,RIGHT函数是从右向左提取,MID函数也是从左向右提取,但不一定是从第一个字符起,可以从中间开始提取。
第一题,从下图所示的E-mail地址中提取“@”字符以前的文本作为账号。
上图所示的E-mail地址中包含用户的账号,但是账号长短不一,单独使用LEFT函数无法提取,需要配合FIND函数来实现。
FIND函数的用法是返回一个字符串在另一个字符串中出现的起始位置。FIND函数的格式是:FIND(要查找的文本,包含要查找文本的文本, 指定开始进行查找的字符)。
本题的思路是使用FIND("@",A19)返回"@"在A19单元格的位置,然后再使用LEFT函数从A19单元格从最左边开始提取到"@"之前的字符。
因此,第一题的公式为:=LEFT(A19,FIND("@",A19)-1),下拉即可完成。
另外也可以使用数组公式:=LEFT(A19:B25,FIND("@",A19:B25)-1),三键结束,下拉。
第二题,将下图所示的电话号码的区号和号码分别提取出来。
区号的提取方法和第一题一样,公式为:=LEFT(A29,FIND("-",A29)-1)。
后面的号码的提取就是用LEN函数来得到A29单元格的长度减去包括“-”符号之前的值做为right函数的Num_chars值为需要提取的字符数。公式为:=RIGHT(A29,LEN(A29)-FIND("-",A29))。
上面的公式涉及到一个很简单但很实用的函数,就是LEN函数。它的功能就是返回文本字符串中的字符个数。LEN函数的语法是:LEN(text)。Text就是要查找其长度的文本。空格将作为字符进行计数。
第三题:从下图所示的15位和18位身份证号码中分别提取出生日期,性别,年龄。
第一,身份证号码对应的性别:
15位号码的最后一位为奇数是男,偶数是女;18位号码的第17位为奇数是男,偶数是女。
第二,身份证号码对应的出生日期:
15位号码的:7~8位为出生年份(2位),9~10位为出生月份,11~12位为出生日期。
18位号码的:7~10位为出生年份,11~12位为出生月份,13~14位为出生日期。
性别的提取需要嵌套多个函数完成。用IF函数来判断MOD函数的值,从而判断出性别是男或女。公式为:=IF(MOD(RIGHT(LEFT(A37,17)),2),"男","女")
其中,IF函数的语法结构:IF(条件,结果1,结果2)。对满足条件的数据进行处理,条件满足则输出结果1,不满足则输出结果2。可以省略结果1或结果2,但不能同时省略。
IF()函数,是一个逻辑判断函数。如果条件为真,返回 TRUE,TRUE 值为1,否则就返回FALSE ,FALSE 值为0。
性别的提取另外还有几种公式都可以实现。
第一,=IF(ISODD(MID(A37,8+LEN(A37)/2,1)),"男","女")
第二,=IF(ISODD(MID(A37,IF(LEN(A37)=15,15,17),1)),"男","女")
第三,=IF(MOD(MID(A37,15,3),2),"男","女")
出生日期的提取,可以使用公式:=TEXT(IF(LEN(A37)=15,19,"")&MID(A37,7,6+IF(LEN(A37)=18,2)),"#-00-00"),然后,下拉实现。
年龄公式为:=DATEDIF(TEXT(MID(A37,7,6+2*(LEN(A37)=18)),"#-00-00"),NOW(),"y"),下拉。
第四题:分别提取下图所示联系方式中的姓名和电话。
第一种方法:
提取电话,在E3单元格输入公式:=MID(A3,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A3&"0123456789")),LEN(A3)),然后下拉。
姓名提取,就直接使用:=SUBSTITUTE(A3,E3,""),下拉,就OK了。
第二种方法:
提取姓名的公式为:=LEFT(A3,LENB(A3)-LEN(A3))
提取电话的公式为:=RIGHT(A3,2*LEN(A3)-LENB(A3))。
第五题:提取下图所示单元格中的数字。
有两种方法都可以实现:第一,使用自定义函数。第二,使用嵌套函数公式。
关于自定义函数的方法,可以参考:《Excel中提取字符常用实例》,网址是:http://www.ittribalwo.com/article/591.html。
使用下面两个公式之任意一个,都可以实现:第一:=-LOOKUP(,-MID(A11,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A11&1234567890)),ROW($1:$15)))
第二:=-LOOKUP(,-MIDB(A11,SEARCHB("?",A11),ROW($1:$15)))
但是上面公式中,如果源数据的数字之前有0,LOOKUP在查找时就会被忽略掉。比如B11单元格中的235号,如果是0235号,那么使用上面的公式,0就会被忽略。