如果单元格包含一个或多个关键字,请更改其他单元格的值

我有一个列中有一些string描述。

例如:

鲍勃·戴维斯
修剪草坪
给奶牛打翻 

另外我还会在不同的工作表或列上列出关键字例如工作关键字列表1:

戴维斯
工作 

播放关键字列表:

刈草
奶牛 

因此,当主列填充了这些文本string时,我希望他们自动检查每个关键字列表以查看这些字是否存在,当find匹配项时,将列表(工作/播放)的标题放在下一个单元格中到它。

我知道在VBA中这是可能的,甚至可以在SelectionChange函数中“实时”执行。 但是,这可能做到没有VBA,如条件格式?

只要使用公式,只要你不太在乎可能不恰当的查找单词的部分,就很容易做到。 虽然忽略了一秒钟的警告。 首先,这是一个公式,它会告诉你是否在源string中的任何地方find了几个string:

 =OR(NOT(ISERROR(FIND(<array of strings to look for>,<string to look in>)))) 

这需要input一个数组公式来运行。 您可以通过按Ctrl-Shift-Enter键来input。 要理解它是如何工作的,请考虑一下Excel在评估一个真实示例时所做的工作

 =OR(NOT(ISERROR(FIND({"a","b","c"},"qbq")))) 

“FIND”查找一个string在另一个string中的位置。 当使用数组调用第一个参数时,它将返回一个位置数组(或者如果未findsearchstring,则为#VALUE!)。 您可以通过input该公式来跟踪评估,然后在其中的expression式中使用F9键:

 =OR(NOT(ISERROR({#VALUE!,3,#VALUE!}))) =OR(NOT({TRUE,FALSE,TRUE})) =OR({FALSE,TRUE,FALSE}) =TRUE 

因此,举个例子,假设你在$ B $ 6:$ B $ 8中search了你的string,$ D $ 2:$ D $ 3中的工作string,以及$ E $ 2:$ E $ 3中的播放string。 你可以把公式

 =OR(NOT(ISERROR(FIND(D$2:D$3,$B6)))) 

在单元格D6中,以数组公式的formsinput它,然后将其拖动到范围D6:E8中,以查找B中的哪些string已经工作或正在播放单词。 然后,您可以使用这些结果来推动进一步的公式或条件格式。

但是,如上所述,你会注意到被search的string中的任何子string都会被find,所以

 =OR(NOT(ISERROR(FIND({"a","b","c"},"bad")))) 

将评估为TRUE。 (如果你的乐趣列表包含“id”,“davids”中的“id”将匹配。)

与Excel常见的情况一样,如果您使用有限的数据集进行某些操作,您可能不会在意这一点。 但是,它可以打败使用这种公式的尝试,作为一个普通的“应用程序”的一部分,用户不知道花哨的arrays技巧或者确切地说是“FIND”。 (你可以通过在search词之后加一个空格来解决这个问题,但是如果你把它交给其他人的话,那就是更加神秘的巫术了。)对于一个快速而脏的扫描来说,没关系。

我已经把另一种方式做了一小部分。 如所暗示的那样,这很快就会变得麻烦。

在列A中input如下内容:1:马牛猪鸡2:狗猫鸟3:鱼猫4:马猫鼠5:猿人海豚6:狗猫花栗鼠

在单元格B1中input以下内容(并复制到B2:B6中):

 =if(sum(iserror(find("cat",A1)),iserror(find("dog",A1)),iserror(find("fish",A1)),iserror(find("bird",A1)))<4,"House pet","") 

B1B5的结果应该显示为空白,而B2B3B4B5应为“House宠物”。

小心如果关键字列表变得太大。 我也成功地使用了这个短列表(正如问题中所暗示的那样),但是如果时间太长,你所input的所有可能性的空间有限 – 更不用说公式中的风险错误了。

我不能让我的数组工作 – 感谢上面的post我现在要去尝试一下,为我的更长的列表。

PS。 不记得我的OR ISERROR数组是干什么的,但是这个数组提供了80个关键字的清单。 谢谢!