excel找出相同的文字标记(Excel文本有多个相同符号)
当excel数据列中,部分的单元格文本中包含了不止一个的相同特定符号,该如何提取这个符号之前,及这两个符号之间,或符号之后的字符串内容。
如下图所示,在A列源数据中,是工程项目使用的一些材料的尺寸面积,在一些单元格中,包含了不止一个材料的信息,而使用了符号” “来分隔不同材料的尺寸信息。
但稍微简单一点的是,这列数据最多只包含了两个“ ”号,也就是3组材料的尺寸信息。
现在我们需要将这列数据进行分隔,以符号“ ”为分隔符,分别提取到3列中。
如单元格文本中只有一个材料的尺寸信息,则提取到第1列;包含两个材料的信息,则分别提取到第1列和第2列;而单元格中出现了两个“ ”号,即3种材料信息,那么按照符号“ ”前、中、后的顺序分别提取到第1列到第3列。
这个场景,其实使用分列是最快捷的,因为它是按照相同的指定分隔符号来分列,基本上只需要通过一次分列操作就能将数据按照符号分成需要的列。
但有时我们的需求就是要通过公式来提取字符,那么今天,作者还是介绍以下几个公式,分别来提取文本中字符的前中后位置的内容。
- 首先是在第1列提取第一个材料的信息。
由于第1个材料的信息拥有固定的位置,即位于符号“ ”之前,或者单元格文本没有符号,则返回原文本。
因此我们可以输入一个公式:=IFERROR(LEFT(A2,FIND(" ",A2)-1),A2)
这是一个关于文本字符提取函数left的公式,它嵌套了find函数。
我们可以记住一点,在绝大多数的字符提取场景中,find函数是必用的一个文本函数,因为它的作用就是返回指定字符在文本中的位置。只有得到该字符的位置,才可以继续嵌套其他函数来提取需要的字符。
同时,在这个函数公式中,也使用了iferror函数来进行容错,即当left表达式的结果为错误时,会返回一个指定值,这里设置的是A2,照应之前的一句话,
“单元格文本没有符号,则返回原文本。”
这个函数公式比较简单,我们就不细讲,关于left、find函数的基础语法和用法,可以参见作者专栏《excel100个常见函数快速入门》。
- 接下来提取第3列,即当单元格文本出现两个“ ”号,要提取最后一个“ ”号后的内容。
这一步我们可以借鉴第1列的提取,left函数是提取字符串左侧数据,那么我们使用right函数,就可以提取字符串的右侧数据。
但提取的关键点在于,文本中包含了两个符号“ ”,如果使用常规的find函数表达式,只会返回第1个“ ”所在的位置。因此我们需要创建一个嵌套公式。
如下完整公式:
=IFERROR(RIGHT(A2,LEN(A2)-FIND(" ",A2,FIND(" ",A2,1) 1)),"")
iferror函数我们先不管,那right函数是提取右侧数据,有两个参数,第1参数是文本,第2参数是提取的字符数量。
在第2参数我们的表达式为:LEN(A2)-find(" ",A2,FIND(" ",A2,1) 1)
用文字来表达,就是A2的字符长度减去符号“ ”在文本中的位置,而重点来了。
FIND(" ",A2,1)的含义是从第1个字符开始查找“ ”号在文本中的位置,这里结果是7,加上1就等于8;接着我们将这个表达式嵌套入另一个find函数中,就如同上面的“FIND(" ",A2,FIND(" ",A2,1) 1)”,那么它就等于FIND(" ",A2,8),即表示从第8个字符开始查找符号“ ”在文本中的位置。
既然是从第8个字符开始,而第1个符号“ ”在文本中的位置是7,那么显然是跳过了第1个“ “号,那么继续查找的符号” “的位置,即是第2个” “在文本中的位置。
最后用整个文本的字符长度减去第2个” “号的位置,再使用right函数来提取字符,便得到我们需要的结果。
这个公式的学习点就在于find函数的嵌套,我们也可以思考一下,当文本中出现三次” “号,要提取第3个符号后的文本,是不是可以嵌套3次find函数呢!?
- 接下来我们再看看第2列的提取,这也是这个场景中,相较要复杂一点的内容。
从下面图中公式就可见一斑了。
先上完整公式:=IFERROR(IF((LEN(A2)-LEN(SUBSTITUTE(A2," ","")))=2,MID(A2,FIND(" ",A2) 1,FIND(" ",A2,FIND(" ",A2) 1)-FIND(" ",A2)-1),RIGHT(A2,LEN(A2)-FIND(" ",A2))),"")
在公式中,作者“贴切”地使用不同颜色来标注不同函数或参数的表达。
也确实,公式分为了几个部分,使用了if函数来判断一个条件,即当单元格文本中出现了两次“ ”号,那么就提取两个符号之间地字符内容,否则就提取第1个符号后内容;
而提取两个符号间的内容,则使用了mid和find的嵌套函数,整个表达式看起来复杂,其实都是在基础语法上的应用,一层一层剥开来看,还是好理解的。
这里作者只介绍以下if函数条件的设置,因为if函数另外两个参数的表达式,讲来讲去还是那几个函数,大家应该擅于去解析公式中各部分的含义,从函数的基本语法出发。
if函数的条件为:
(LEN(A2)-LEN(SUBSTITUTE(A2," ","")))=2
有经验的童鞋可能一看到这个公式,就会想到它是查找某个字符在文本中出现的次数。
这里使用了len函数和substitute函数。
len函数是计算字符的长度,substitute函数是替换一个字符为另一个字符,这里是将“ ”号替换成空值,而且是全部替换,那么很明显,原文本少去了符号” “,那么原文本长度减去替换后的文本长度,不就得到了该字符出现的次数!
这仿佛是“偷梁换柱”,是从另一个角度来达到查询的目的,这种思路是很有意思的。
最后我们来看看公式填充后的结果:
那么总结一下,在近段时间多次介绍关于单元格文本中指定字符的提取,这类场景我们所用到的函数基本还是那几个,什么find、mid、left等等,就是这些基础函数,来完成我们的提取任务。
所以,万变不离其宗,打好函数基础,才是解决问题的基石。
最后ps:如果需要文件来练习,可以私信作者,或者加入交流群。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com