我想弄清楚是否有一个公式可以让我在多个连续单元格中搜索包含特定文本字符串的单元格。如果找到该值,我需要公式来显示该文本字符串。
示例:我有 27 个连续的单元格。每个单元格都包含一个独特的产品 SKU。我想搜索所有 27 个单元格并返回包含文本字符串“HD”的单元格的值
我尝试过:
=MATCH("*-HD*",CI17:CM17,0)
,但这没有用。任何建议将不胜感激。
我尝试过:
=MATCH("*-HD*",CI17:CM17,0)
,但是没用
MATCH(...)
函数返回数组中找到的元素的索引(表示给定范围),这意味着如果匹配命中,它将仅返回一个值,否则返回#N/A
。它的搜索始终在数组/单元格范围的上下文中。
另一方面,SEARCH(..)
函数在数组或单元格的元素的文本中进行搜索。因此,搜索更像是检查单元格/数组元素是否包含文本。当您将数组/单元格范围放入其中时,搜索过程将应用于给定数组/单元格范围中的每个元素/单元格,从而提供多个结果。这意味着对每个元素检查关键字搜索,并为每个元素返回结果结果。这种情况下的结果将是在元素/单元格中找到搜索关键字的第一个位置的索引。您可以遵循@user11222393的建议,尽管我个人更喜欢在这种情况下使用
ISNUMBER()
,因为它需要一个参数并且值在文本中。它的简短版本:
= FILTER( CI17:CM17, ISNUMBER(SEARCH("HD", CI17:CM17)) )
或者:
= FILTER( CI17:CM17, IFERROR(SEARCH("hd", CI17:CM17), 0) )
为了清楚起见,您也可以将其写成如下:
= LET( source_row, CI17:CM17,
search_key, "HD",
search_result, FILTER(source_row, ISNUMBER(SEARCH(search_key, source_row))),
search_result
)
ISNUMBER()
的作用是将
SEARCH()
得到的数组转换为
TRUE
或
FALSE
。同样,
IFERROR(..., 0)
为那些没有匹配的内容分配零。然后使用
FILTER
删除那些匹配的
FALSE
或
0
。