【问题标题】:How to check if a excel cell contains a word如何检查excel单元格是否包含单词
【发布时间】:2020-04-07 07:37:33
【问题描述】:

我正在寻找一个 excel 公式,如果单元格包含单词模式(基本上想知道是否存在任何这样的单元格),则该公式会计算或返回 true,但只有在

时,公式才会将单元格识别为有效

要求 1 : 完整的单词模式存在并且作为被检查单元格中的单个单词(例如:如果 ab12 是模式,ab123 无效,只有 ab12 有效)

要求2:匹配词可以在被检查单元格的开头或结尾或中间

要求 3:被检查的输入单元格可能包含此匹配词,并且可以包含前缀/后缀为“”(空格)或换行符/提要。因此,该公式应将此单元格识别为对这两种情况均有效

示例单词模式:ab-1_cd_1234

目前我已经尝试了以下两个公式(也尝试了标准中的“”,“*”,“~”)但没有奏效:

公式 1:=ISNUMBER(SEARCH(A2,B2))

          Here, A2 is the pattern, B2 is the input to verify and will be verified in full B column

公式 2:=COUNTIF($B:$B, "* " &A2& " *")

          Here, B:B is the input column and A2 is the pattern

另外,我知道单词 中有一个通配符,它​​定义了一个单词的开头和结尾,但同样在 excel 中不起作用。

所以,如果我能得到任何适用于 excel 的公式,那就太好了

【问题讨论】:

  • 您能详细解释一下要求 3 吗?特别是你的例子。您希望在那里找到什么模式?
  • 是的,请务必从您的问题中消除歧义。在明确您要在单元格的开头、中间或结尾查找ab12(而不是“ab123”)之后,您继续说ab12 可能“包含前缀/后缀为”“(空格)或换行/进给”。事实上,ab12 不能“包含”任何东西,尤其是不能按其性质添加前缀或附加的前缀或后缀。为了锦上添花,您然后引用“ab-1_cd_1234”作为示例,这看起来像是您明确排除的相同“ab123”的示例。我哪里错了?
  • @JvdV - 如您所知,一个单元格可能包含多行,如果我正在搜索的模式位于新行的开头(在单元格中),那么不会有在此之前的空间,它将是一个换行符。同样,如果同一单词出现在行尾(换行符将在单词末尾而不是空格之后)。在所有其他情况下,单元格将包含类似“...text.... Word-that-matches-the-pattern ....text...”之类的文本。我想搜索的模式如我的示例中所述:ab-1_cd_1234
  • @Variatus - 我希望根据我之前的评论清除您的查询。而且,仅供参考,我正在搜索的单元格不仅包含一个单词。它可能是一组单词或一组包含多个文本的行,我正在其中搜索具有特定模式的单词。更新了查询,希望现在清楚。

标签: excel excel-formula office365 wildcard


【解决方案1】:

你可以试试下面的公式:

=SUMPRODUCT(--($A$2=FILTERXML("<a><b>" & SUBSTITUTE(SUBSTITUTE(B2,CHAR(10),"</b><b>")," ","</b><b>") & "</b></a>","//b")))>0

编辑

解决空字符串问题:

=SUMPRODUCT(--($A$2 & "#"=FILTERXML("<a><b>" & SUBSTITUTE(SUBSTITUTE(B2,CHAR(10),"#</b><b>")," ","#</b><b>") & "#</b></a>","//b")))>0

编辑 2: 要计算包含模式的单元格数,您可以使用数组公式:

=SUMPRODUCT(--(IFERROR(SEARCH(" " & A2 & " "," " & SUBSTITUTE($B$2:$B$10,CHAR(10)," ") & " "),0)>0))

编辑后的数组公式按ctrl+shift+enter确认

【讨论】:

  • 谢谢。它适用于我的大部分输入,但在某些情况下它会抛出#VALUE!。另外,希望通用建议的公式,因为模式 'ab-1_cd_1234' 只是一个例子(注意:我不知道公式中的 是什么意思,猜测它不是模式的起始两个字符)公式不适用于单元格中的以下场景(在“”中给出)并抛出#value!错误场景2:以下场景末尾出现空格“这是第一行场景2:ab-1_cd_1234”
  • 另外,场景 7:不确定,但我猜您的公式仅在匹配模式仅存在于单元格全文的开头和结尾时才有效。 “文本 ab-1_cd_1234 存在” 场景 8:单元格仅包含单词,但最后有空格“ab-1_cd_1234” 场景 9:单元格仅包含单词,但开头和最后有空格“ab-1_cd_1234” 场景 10:匹配模式“ab-1_cd_1234”前后包含换行符的单元格
  • 该公式在文本中的任何位置查找单词,但如果文本在一行中有多个空格(或在文本的开头或结尾),则会出现问题。这可以通过在搜索词的末尾添加一个不会出现在文本本身中的符号来解决。在更正的示例中,这是“#”。
  • 谢谢。您的公式适用于该场景,但我无法将其概括为一系列输入单元格。正如您在我的公式 2 中看到的那样:=COUNTIF($B:$B, "*" &A2& "*")。此处在 B:B 中搜索 A2 中的模式(但不能满足其他要求)。您能否让我知道是否有办法通过修改您的公式来验证一系列单元格?
  • 更新后的公式适用于除全字检查以外的所有要求(要求 1)。例如:在第 10 行的屏幕截图中,如果您提供“ab-1_cd_12341”而不是“ab-1_cd_1234”,那么它仍然认为是有效输入。如果在单词的开头添加某些内容,则大小写相同
【解决方案2】:

请试试这个公式,其中 A3 是要搜索的文本,要找到的文本在 A1 中。

=IF(ISERROR(FIND(" "&amp;$A$1&amp;" "," "&amp;SUBSTITUTE(A3,CHAR(10)," ")&amp;" ")),"",TRUE)

【讨论】:

  • 谢谢。但是,它不适用于以下场景 a) abdccddab-1_cd_1234:场景 3 b) 场景 4:abdccddab-1_cd_1234 其中,搜索模式是另一个词的一部分,我不想被包括在内。
  • 一张图胜过千言万语。现在我明白你需要什么了。 :-) 我已经修改了我的公式。请尝试一下。
  • 谢谢,它适用于我提到的场景。但是,你能告诉我这个公式是否可以修改,以便可以验证整列吗?如您所见,我的公式 2 最初具有 COUNTIF,我可以解析完整的 B:B 列以验证 A2 中的模式(但无法匹配完整的单词)。而且,您目前的公式只能在此处检查输入单元格 A3
  • 如果您考虑辅助列,如果您将 "A3" 更改为 "B3" 并将字符串模式放在 A1 中,我的公式可以用于该列的第 3 行。从第 3 行复制到 B 列中使用的所有行,并使用 COUNTIF 计算帮助程序中的 TRUE 结果并将它们显示在 B1 中。辅助列的优点是您可以使用它来突出显示 CF 的违规者。但是,如果您只希望 B1 中的单个公式在没有帮助列的情况下给出相同的结果,则必须部署能够循环的函数。请确认这是您想要的,我会尝试一下。
  • 是的,我想要几个单元格。但是,我有一个解决方案。感谢您的支持,谢谢
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多