昨天兰色看到一个同学提问:把括号()内含有*号的内容提取出来。
肯定有不少人说:这还不容易,用Ctrl E就可以了。那兰色就帮你试一试,结果是错的。
喂!兰色,你跑题了吧,今天的标题主角是Vlookup,这个问题和Vlookup有什么关系?难道要用它?这不太可能吧,Vlookup什么时候可以提取字符了?
没错, 兰色试了很多方法,而用Vlookup函数写的公式最简单。
那公式怎么写,兰色快告诉我。先别急,这个需要从最近兰色遇到的另外一个简单例子说起。
【例】如下图所示在右表中设置Vlookup公式,根据E列的内容从左表中查找,明明看上去一样公式也没错误,结果却查找不到。
=VLOOKUP(E2,$B$2:$C$6,2,0)
究其原因,原来是B列的内容后含有换行符。
换行符很多同学不知道怎么给删除掉(可以用分列),那只能在公式中处理。兰色看了有不少同学用clean或trim,但有时候你的表中可能有这两个函数删除不掉的不可见字符。这时候,本文另一个主角要出场了,它就是标题中我们说的神秘字符 * (星号)
*是表示任意多个字符的通配符,Vlookup的第一个参数又支持用通配符查找,所以二者合作,正好可以解决这个问题。
=VLOOKUP(E2&"*",$B$2:$C$6,2,0)
咱们理解了Vlookup+*的模糊查找用法后,就可以解决今天遇到的超复杂字符提取问题了。
分析:
1、因为字符串中有多组括号,所以第一步我们需要找到*后的括号位置
=FIND(")",A2,FIND("*",A2))
公式说明:先查找*号的位置(因find不支持通配符,所以这里只是一个普通符号,并不是通配符),然后再用find函数查找*后 ")" 的位置。FIND函数第3个参数为查找开始位置。
2、用left函数把字符截取出来,括号后面多余的部分删除掉。
=LEFT(A2,FIND(")",A2,FIND("*",A2)))
3、从字符串后用right函数分别截取1,2,3,4......15次(提取次数要大于括号内的字符长度),你会发现终有一个是我们要想的结果。
4、问题是怎么把两边有括号的行提取出来?嘿嘿,这时候该Vlookup闪亮登场了,配合*号完美的实现了提取。
=VLOOKUP("(*)",RIGHT(LEFT(A2,FIND(")",A2,FIND("*",A2))),ROW(1:15)),1,0)
注:(*)表示模糊查找两边有括号的。
最终的公式为:
=VLOOKUP("(*)",RIGHT(LEFT(A2,FIND(")",A2,FIND("*",A2))),ROW($1:15)),1,0)
如果以为这只是vlookup和*偶尔应用,不足以支持“逆天”称号,你可曾记得兰色前段时间分享的另一个示例,也是用了同样的思路,解决了一个超难的字符串提取难题。
兰色说:通过今天的示例,是不是又刷新了对Vlookup认知。这个你认为已完全掌握的函数,竟然还可以这么用
兰色根据多年经验,录制了一全套适合新手和初中级阶段用户学习的Excel教程。包括Excel表格88个函数用法、119个使用技巧、透视表从入门到精通50集、图表从入门到精通169集,。详情点击下方链接:
发表评论