本文将用到: MID(数据,取数第1位,取几位) FIND/SEARCH(目标值,查找文本) MATCH(目标值,查询区域,精准/模糊) VLOOKUP(目标值,查询区域查询区域列号,精准/模糊) ISERROR() 结果为TRUE/FALSE IF(条件,满足条件结果,不满足条件结果)
一位来自广西的网友,据推测是个小哥,他想通过1、2两列进行对比,若1列能在2列中找到一样的城市,显示在3列。
来自广西网友的提问
表哥思路:首先提取B列的城市名称到辅助列,再判断是否在C列的城市列表中,最后将结果显示在D列。
我们截取前几行作为案例一步步说明如何实现。
第一步:组合MID FIND提取B列的市级城市如果每个城市的名字都是两个字,则可使用公式MID(8,2)直接提取。
但观察到案例中需要提取市级城市的名称字数不一致,有的是两个字,有的是三个字。所以不可直接用MID提取,需要借助能够帮助定位字数的关键字。
由于各行数据非常整齐,均包含关键字"市",并且省级字符数均为7个。
因此,可以借助查询函数,定位关键字"市",以确定城市字数。
如何通过关键字"市",以确定提取城市字数?
以B6为例,首先,确认市级城市名的第1个字的位序。
由于数据均来自"广西壮族自治区"(此处共7个字),则市级城市名字的起始位序为8;
之后,确认关键字"市"在第几位。公式为FIND("市",B6);
根据以上可得,城市的字数为"市"的位序与城市名起始位序之差,即为城市名的字数(如图绿色部分)。
综上,提取城市名称的辅助列公式为:
MID(B6,8,FIND("市",B6)-8)
提取了B列的城市名称后,下一步判断是否该城市在C列名单范围内。
第二步,使用查询函数与名单城市进行匹配案例中,名单列表的全部城市被存储在一个合并单元格中,可将其视作一段字符串,也可作为数据区域。因此,查询方法分为两种。
与第一步中提取"市"关键字的方法一致,在单元格C3中查找,是否包含辅助列的城市名。以第3行为例,公式为FIND("钦州",$C$3)。
表哥Tips:
此处也可用函数SEARCH。公式为SEARCH("钦州",$C$3)。当判断内容为中文时,FIND和SEARCH用法几乎完全一致,而当在判断英文时,FIND判断一致性不但包括内容,还有大小写,所以FIND比SEARCH的匹配要求更加严格。
此方法查询原理为是否辅助列单元格与C列一致,显然若直接使用函数,结果全部城市都会被判定不在列表范围内。因此,需要用到通配符"*",与辅助列城市结合成一段与C列结构类似的字符串,系统才能进行正确判断。
公式为:
VLOOKUP("*"&"钦州"&"*",$C$3,1,FALSE)
或MATCH("*"&"钦州"&"*",$C$3,0)
第三步,根据查询结果显示最终结果在上一步中,我们根据查询函数进行判断,判断是否辅助列提取的城市名在C列的名单列表中。若能够查询到,则说明在名单内,返回查询到的数据,而查询不到,则显示报错。
表哥Tips:
FIND/SEARCH报错时显示"#VALUE";VLOOKUP/MATCH报错显示"#N/A"。
我们利用是否报错这一点,在D列显示最终结果。
判断查询函数是否报错,可使用函数ISERROR(),如果报错,此函数返回"TRUE",否则返回"FALSE"。如果你觉得听起来似乎有些糊涂,可参考下表缕清逻辑:
判断是否报错的公式为:
ISERROR(第二步的查询函数)
结果为:
最后用IF函数判断并显示最后结果,如果"TRUE"则显示"N",否则显示"Y"。
综上三步,回顾整体思路,及所用到函数为:
以上是提取关键字并进行判断匹配的方法,
希望表哥的思路能够对你起到抛砖引玉的作用。
你的大法是什么呢?
欢迎与表哥分享
↖(^ω^)↗撒花
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved