【问题标题】:If cell contains 1 or more keywords, change value of a different cell如果单元格包含 1 个或多个关键字,则更改不同单元格的值
【发布时间】:2011-03-22 15:58:27
【问题描述】:

我有一列有一些字符串描述。

例如:

鲍勃·戴维斯 修剪草坪 给奶牛小费

此外,我将在不同的工作表或列上列出关键字列表 比如工作关键词列表1:

大卫 工作

播放关键字列表:

割草 奶牛

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

我知道这在 VBA 中是可能的,甚至可以在 SelectionChange 函数中“即时”完成。但这是否可以在没有 VBA(例如条件格式)的情况下实现?

【问题讨论】:

  • 字符串中可能出现的单词数量是否有限制?拆分它们并进行搜索很容易。但是,如果数量很大,您必须编写一个很长的公式来拆分每个单词。
  • 嗯,它不同,但会说最大值是 8
  • 但是对于这种情况,我们只假设 2

标签: excel conditional-formatting vba


【解决方案1】:

这很容易用公式来完成,只要您不太在意可能不正确地找到单词的某些部分。不过暂时忽略这个警告。首先,这里有一个公式可以告诉您是否在源字符串中的任何位置找到了多个字符串中的任何一个:

=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"))))

'FIND' 查找一个字符串在另一个字符串中的位置。当使用第一个参数的数组调用时,它将返回一个位置数组(或 #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 的常见情况一样,如果您使用有限的数据集做自己理解的事情,您可能不会关心这一点。但它可能会挫败将这种公式用作一般“应用程序”的一部分的尝试,该应用程序的用户不知道花哨的数组技巧或确切的“查找”做什么。 (您可以通过在搜索词之后放置一个空格等来解决这个问题,但如果您将其交给其他人,那只是更神秘的巫术等待被打破。)不过,对于快速而肮脏的扫描,这很好.

【讨论】:

  • 出于某种原因,ISERROR(FIND({"a","b","c"},"bad")) 对我来说仅计算为标量值,这似乎是基于查找操作的第一个结果(即find("a", "bad"))。有什么想法吗?
  • @Grzenio,您是否将其作为数组公式输入,并输入到有足够空间显示所有三个元素的范围内?
  • 这是我的错误,我没有输入作为数组公式。谢谢!
【解决方案2】:

我已经为少数人设计了另一种方法。正如所暗示的那样,这很快就会变得很麻烦。

在 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 中的结果应显示为空白,而 B2B3B4B5 中的结果应显示为“家庭宠物”。

如果关键字列表太大,请小心。我也成功地将它用于短列表(正如问题中所暗示的那样),但是如果它太长,您输入所有可能性的空间有限 - 更不用说公式中的风险错误了。

我无法让我的数组工作 - 感谢上面的帖子,我现在也要去尝试一下,以获得更长的列表。

ps。不记得我对 OR ISERROR 数组做了什么,但您提供的这个数组非常适合我的 80 个关键字列表。谢谢!

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多