如果一个单元格包含字符串

49

如果相邻的单元格包含特定字符串,我该如何给单元格赋值?

例如,在A列中的字段:

    dog11
    cat22
    cow11
    chick11
    duck22
    cat11
    horse22
    cat33

列B中的语法为:

=IF(SEARCH("cat",A1),"cat",IF(SEARCH("22",A1),"22","none"))

它总是选择第一个 TRUE(真)单元格,但在值不为真时就跳过。

3个回答

104

SEARCH如果没有匹配,不会返回0,而是返回#VALUE!。因此需要用IFERROR来包装SEARCH的调用。

例如...

=IF(IFERROR(SEARCH("cat", A1), 0), "cat", "none")

或者

=IF(IFERROR(SEARCH("cat",A1),0),"cat",IF(IFERROR(SEARCH("22",A1),0),"22","none"))

这里,IFERRORSEARCH工作时返回其值;否则返回给定的值0


1
感谢您的答案。无法相信微软没有做一个短方法来处理这个问题,比如“包含”直接返回真或假,或者“索引”返回“-1”或实际位置... - AFract

4
您可以使用OR()将表达式分组(以及AND()):
=IF(OR(condition1, condition2), true, false)

=IF(AND(condition1, condition2), true, false)

如果你想测试“cat”和“22”:

=IF(AND(SEARCH("cat",a1),SEARCH("22",a1)),"cat and 22","none")

嘿,谢谢你的回复,但我希望在这里得到两个不同的结果。当一个字符串包含“cat”时,我想说“cat”,当它包含“22”时,我想说22。在实际世界的例子中,不会有重叠。谢谢。 - Csongor
只要值为1,它就会继续短路,除非你连接。例如:=Concatenate(IF(SEARCH("cat",a1),"cat",""),IF(SEARCH("22",a1),"22","")) - Brad Christie

0
=IFS(COUNTIF(A1,"*cats*"),"cats",COUNTIF(A1,"*22*"),"22",TRUE,"none")

你能解释一下为什么你的答案比已被接受的答案更好吗? - mjuarez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接