送人玫瑰,手有余香,请将文章分享给更多朋友
动手操作是熟练掌握EXCEL的最快捷途径!
【置顶公众号】或者【设为星标】及时接收更新不迷路
小伙伴们好,今天要和大家分享一则文本处理技巧,在无规则的情况下巧用函数提取姓名。
题目是这样的。根据下面表中源数据的信息,将姓名提取出来。
借助今天这两道题目,我要向大家分享一则如何在字符串中定位第一个汉字位置的技巧。
观察一下这两个表格,尤其是第二个表格,源数据中情况比较复杂,各种状态下的符号混杂,确实需要小心应对。
但是这两张表格也有有规律的地方。他们都是由汉字和一些特定的符号组成。我们知道,所有的汉字都是双字节,而所有的字母、数字、西文字符等都是单字节,因此这就给了我们解决问题的思路了。
先来看看第一个表格。这个表格相对比较简单,可以直接利用MID函数来提取。唯一的难点是如何确定姓名的起始位置。
在单元格C3中输入公式“=MID(A3,MATCH(2,LENB(MID(A3,ROW($1:$15),1)),),LENB(A3)-LEN(A3))”,三键回车并向下拖曳即可。
思路:
MID(A3,ROW($1:$15),1)部分,依次提取源数据中从左到右的每一个字符
LENB函数返回字节数。所有的汉字部分都返回数字“2”
利用MATCH函数来确定第一个“2”的位置,也就是第一个汉字的位置
LENB(A3)-LEN(A3)部分则是用来确定姓名的长度。两部分相减,差值正好是汉字部分的长度
最后应MID函数提取姓名
这里的重点是如何确定第一个汉字的位置,MATCH函数则配合LENB函数巧妙地解决了这个问题。
第二个表格则要复杂许多。数据中夹杂了中文括号(数量1-3个)、空格、不可见字符等等。
在单元格C2中输入公式“=TRIM(SUBSTITUTE(TRIM(MID(A2,MATCH(2,LENB(MID(A2,ROW($1:$50),1)),),FIND("(",A2&"(")-MATCH(2,LENB(MID(A2,ROW($1:$50),1)),))),"免费",""))”,三键回车并向下拖曳即可。
思路:
和前面的那个问题一样,我们首先要确定第一个汉字的起始位置。这部分和前面的思路是相同的
由于有些汉字后面跟有中文左括号,而有些有没有,因此需要在源数据末尾给他们统一加上一个中文左括号。接下来用FIND函数确定中文左括号的位置
FIND("(",A2&"(")-MATCH(2,LENB(MID(A2,ROW($1:$50),1)),)部分的含义是,中文左括号的位置减去第一个汉字的位置,所得值就是名字的长度
这样,起始位置、名字长度都已经有了,就可以用MID函数提取姓名了
完成后用TRIM函数去除多余空格
接下来还有处理比较特殊的一个,“免费 环卫站站长”。利用SUBSTITUTE函数将“免费”替换后,去除多余空格即可。
通过上面两个例子我们可以看到,凡是在汉字和字符混合的文本字符串中,如果需要提取汉字部分,像今天介绍的这两个例子一样的,最常用的方法就是确定首个汉字的位置后,再来提取所需的字符串。
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
我就知道你“在看”
联系客服