我正在尝试根据特定单元格中包含的字符串值对数据进行分类。例如,如果单元格 P6 包含单词“医院”或“疗养院”,则单元格 B2 应将其类别列为“医院”,如果 P6 包含“机场”、“航站楼”或“航空”,则 B2 应列出“机场”。
首先,我尝试使用 If 函数,但是,我无法正确嵌套它们。
=IF(SEARCH("stadium",$P6)>=1,"Sport")
它按预期工作。它要么打印正确的类别,要么给出“VALUE!”错误。
但是,当我尝试扩展语句时,它无法识别添加的搜索词。
=IF(SEARCH("stadium",$P6)>=1,"Sport",IF(SEARCH("sanatorium",$P6)>=1,"Hospital"))
这仍然会找到字符串“stadium”,但无法识别“sanatorium”。如果 P6 包含单词“sanatorium”,这仍然会给我 #VALUE!。
如果您能为我指明正确的方向,或者告诉我如何使用查找表等其他方法来实现这一点,那就太好了。
答案1
这是因为,SEARCH 返回一个数字或一个错误。如果未找到该单词,则返回一个错误。
因此,如果单元格不包含stadium
错误,#VALUE
则会返回到第一个搜索,并且您无法尝试将其等同于数字,并且整个公式会短路并#VALUE
返回。
用来ISNUMBER
克服。 如果返回的是错误ISNUMBER
则会返回:FALSE
=IF(ISNUMBER(SEARCH("stadium",$P6)),"Sport",IF(ISNUMBER(SEARCH("sanatorium",$P6)),"Hospital"))
现在,正如您所假设的,创建一个包含搜索条件和预期输出的表,然后使用查找类型公式返回正确的输出,这样会更好、更容易:
=INDEX(F:F,AGGREGATE(15,6,ROW($E$1:INDEX(E:E,MATCH("zzz",E:E)))/(ISNUMBER(SEARCH($E$1:INDEX(E:E,MATCH("zzz",E:E)),A1))),1))
这将遍历表并返回第一个匹配的第一个输出。