原创作者: 卢子 转自: Excel不加班
卢子:提到字符提取,不得不提到Mid、Left、RIGHT三兄弟,不管什么字符到他们手工,都能按要求完美地提取出来。老大Left可以从左边提取字符,老二Right可以从右边提取字符,老三Mid天赋最好,可以从任何位置提取字符。
网友:既然这样就学Mid就行,何必全部都学。
卢子:在函数的世界里,讲究合作精神,即使你再强大,也不能忽略别人的作用。其实做人又何尝不是这样,你能力好也不能看不起别人,因为别人通过努力也能成为有能力的人。
网友:说的也是,现在讲究的是团队合作的精神,一个人如果离开团队,再牛逼也没用。
卢子:那就通过几个例子来说明这三兄弟。
1.通过软件截图,默认情况下会出现软件名、时间、后缀,怎么将他们分别提取出来。
提取左边6位,也就是软件名。
=LEFT(A2,6)
从中间第8位开始提取14位,刚好就是时间。
=MID(A2,8,14)
从右边提取3位,就是后缀。
=RIGHT(A2,3)
2.前面提到的是最理想状态,很多时候软件名不确定,后缀字符个数不确定,这样仅仅通过简单的办法是无法满足的,结合FIND、LEN函数会使问题变得简单。
通过观察,软件名后面都有“_”符号,利用FIND找到这个符号的位置,减去1就是软件名最后一个字符的位置。
=LEFT(A2,FIND("_",A2)-1)
时间都是在“_”的后面,利用FIND找到这个符号的位置,加上1就是第一个数字的位置,因为是固定14位,提取字符数14就可以。
=MID(A2,FIND("_",A2)+1,14)
后缀在“.”符号后面,后缀字符数就是总字符减去到“.”符号位置的总长度。也就是说
N=总字符 - “.”符号的位置FIND(".",A2)
N=LEN(A2)-FIND(".",A2)
=RIGHT(A2,LEN(A2)-FIND(".",A2))
3.身份证是每个成年人的名片,有了它,可以获取省份、地区、出生日期、性别等信息。身份证很重要,要记得妥善保管好。
身份证简介:
现行的身份证全部是18位,早期的是15位。
前2位代表省份;
前6位代表地区码;
15位7-12位是出生年月,前面省略19,18位是7-14位是出生年月;
15位13-15位是代表性别,18位是15-17位是代表性别,奇数就是男,偶数就是女;
现行的身份证,18位号码是验证码。
通过这些知道,要知道省份跟地区码必须有一份地区码的明细表才可以获取。
地区码
根据前2位代表省份,前6位代表地区码。
=VLOOKUP(LEFT(A2,2),地区码!A:B,2,0)
先用Left提取左边两个字符,用Vlookup获取省份对应值,同理可以获取地区。
=VLOOKUP(LEFT(A2,6),地区码!A:B,2,0)
回头看看出生年月日:15位7-12位是出生年月,前面省略19,18位是7-14位是出生年月。
=TEXT(IF(LEN(A2)=15,19,"")&MID(A2,7,IF(LEN(A2)=15,6,8)),"0-00-00")
先判断是不是15位,如果是前面就连接19,否则连接空,IF(LEN(A2)=15,19,"")
如果是15位就提取6位,否则就提取8位IF(LEN(A2)=15,6,8)
IF(LEN(A2)=15,19,"")&MID(A2,7,IF(LEN(A2)=15,6,8)),到这里就是将出生日期变成统一8位的格式如19870905
利用Text将8位的日期格式显示成1987-09-05
这是传统的思路,但其实可以将公式再做精简,得到的结果需要将单元格设置为日期格式。
=TEXT(MID(A2,7,11)-500,"#-00-00,")*1
网友:-500,还有#-00-00,是干嘛用的?
卢子:先来看看这几条公式
=TEXT(1999,"#,")显示2
=TEXT(1499,"#,")显示1
=TEXT(1001,"#,")显示1
=TEXT(501,"#,")显示1
也就是说这个“,”的作用就是将数字除以1000并四舍五入的结果,也就是千位符。
再回头看看MID(A2,7,11),不管是15还是18位身份证,从7位开始提取11位就是将提取到日期跟性别组成的所有数字。实际后面的3位是多余的,需要去除。TEXT(MID(A2,7,11)-500,"#-00-00,"),-500的作用就是将后面的数字变成小于500的数字,加上最后面的“,”,其实就是舍去掉最后3位,前面多取了3位,现在还回去,有借有还。
网友:如果这样直接后面3位不提取不就得,干嘛绕那么多弯。
卢子:如果不提取是不是要像最开始一样判断是不是15,然后再决定取多少位,这样反而多了一个判断条件。不过这条公式有一个缺陷,就是当1930年前出生的人如290815会显示错误。不过正常这种年龄的人,你用他们的身份证还有意义吗,你懂的。一直以来我都觉得,写公式就是一个不断取巧的过程。
15位13-15位是代表性别,18位是15-17位是代表性别,奇数就是男,偶数就是女。
=IF(ISODD(MID(A2,15,3)),"男","女")
奇数偶数的判断可以利用最后1位判断,也可以通过所有字符判断。如123,最后1位是奇数,它就是奇数,跟整个数字判断的结果是一样的。
MID(A2,15,3)提取15位的最后1位,跟提取18位的3位数字
ISODD(MID(A2,15,3)),ISODD判断数字是不是奇数,是就返回TRUE,否则返回FALSE
IF就是返回男女的对应值
说明:在低版本用MOD(数字,2)判断奇数跟偶数。
网友:这后面两条公式太巧妙了!
卢子:毕竟像这种公式可遇不可求,并不是任何人都可以想到的。学习阶段可以让公式缩减到最少字符,但实际工作还是以正常思维处理为好,以防考虑不周全而出错。
网友:收到,看来卢子还是属于比较严谨的人。