2011-03-22 43 views
3

我有一列中包含一些字符串说明。如果单元格包含一个或多个关键字,请更改其他单元格的值

例如:

 
Bob davids 
mowing the lawn 
tipping cows

此外,我将有一个不同的表或列关键字 例如工作关键字列表1的列表:

 
davids 
work

播放关键字列表:

 
mowing 
cows

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

我知道这是可能的VBA,甚至可以在“飞”功能SelectionChange功能。但是,这可以做到没有VBA,如条件格式?

+0

字符串中的可能字数有限制吗?拆分它们并搜索很容易。但是,如果数量很多,则必须编写一个很长的公式来分隔每个字。 – paulmorriss 2011-03-22 16:56:59

+0

嗯它不同,但会说最大是8 – NickG 2011-03-22 17:54:58

+0

但是对于这种情况,让我们假设2 – NickG 2011-03-22 17:57:09

回答

9

只需要使用公式就可以很容易地做到这一点,只要您不太在意可能不恰当地查找单词的部分内容。虽然忽略了一秒钟的警告。首先,这里是一个公式,会告诉你,如果有若干字符串是在源字符串中随处可见:

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

这需要输入数组公式为它工作。您可以通过使用Ctrl-Shift-Enter输入来完成此操作。要了解它是如何工作的,考虑什么样的Excel做在评价一个真实的例子:

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

“查找”内找到另一个字符串中的位置。当用数组调用第一个参数时,它将返回一个位置数组(或者如果未找到搜索字符串,则为#VALUE!)。您可以通过输入公式,然后使用F9键上表达追查其中的评价:

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

所以,你的例子,说你有你的字符串,你想搜索在$ B $ 6:$ B $ 8您的工作字符串为$ D $ 2:$ D $ 3,而您的玩字符串为$ E $ 2:$ E $ 3。你可以把公式

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

在小区D6,其输入为数组公式,然后通过一系列D6拖动它:E8找到该字符串B的工作,或者他们游戏的话。然后,您可以使用这些结果来推动进一步的公式或条件格式。

然而,正如上面提到的,你会注意到,被搜索的字符串中的任意子将得到发现,所以

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

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

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

+0

谢谢,这似乎很多玩耍。 – NickG 2011-03-25 21:38:07

+0

由于某种原因,ISERROR(FIND({“a”,“b”,“c”,“bad”))'对我来说只评估标量值,这似乎是基于查找操作的第一个结果(即'find(“a”,“bad”)')。有任何想法吗? – Grzenio 2015-01-15 14:26:07

+0

@Grzenio,你是否将它作为一个数组公式来输入,并进入一个有足够空间显示所有三个元素的范围? – jtolle 2015-01-15 15:38:40

1

我已经放在一起的另一种做法为少数。正如所暗示的那样,这很快就会变得麻烦。

输入以下到列A: 1:马牛猪鸡 2:狗猫鸟 3:鱼猫 4:马猫鼠标 5:猿人类海豚 6:狗猫花栗鼠

在单元格B1输入以下(和复制到B2:B6):

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

B1B5结果应在B2而结果显示为空白, B3,B4B5应该读“House宠物”。

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

我无法让我的数组正常工作 - 感谢上面的帖子,我现在就去尝试一下我的长列表。

ps。不记得我的OR ISERROR阵列正在做什么,但是您提供的这个阵列对于我的80个关键字清单非常有用。谢谢!

相关问题