Excel:使用数组公式搜索特定字符串中的字符串列表?

时间:2011-11-29 16:06:32

标签: excel search excel-vba find excel-formula vba

我想在单元格中搜索单词列表。 我认为这可以作为一个数组公式:

{=FIND(<list of words I want to search for>,<cell I want to search>)}

但只有当我搜索的单元格中的单词位于我搜索的单词列表的第一行时,它才会找到匹配项。有没有办法编写一个查看整个列表的公式?如果它没有返回TRUE / FALSE,我更喜欢。我知道如何在单元格中搜索单词列表,并根据单元格中是否存在单词中的单词返回TRUE / FALSE。我想知道找到了哪个单词或它的位置。

4 个答案:

答案 0 :(得分:28)

如果找不到匹配项,将返回匹配的单词或错误。对于这个例子,我使用了以下内容。

要搜索的字词列表:G1:G7
要搜索的单元格:A1

=INDEX(G1:G7,MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*(ROW(G1:G7)-ROW(G1)+1)))

Ctrl + Shift + 输入作为数组公式输入。

此公式的工作原理是首先查看单词列表以查找匹配项,然后将列表中单词的位置记录为正值(如果找到)或者如果未找到则将其记录为负值。此数组中的最大值是列表中找到的单词的位置。如果未找到任何单词,则会将负值传递到INDEX()函数,从而引发错误。

要返回匹配单词的行号,您可以使用以下内容:

=MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*ROW(G1:G7))

这也必须按 Ctrl + Shift + Enter 作为数组公式输入。如果找不到匹配项,它将返回-1

答案 1 :(得分:2)

为我这样的人添加这个答案,对他们来说,真正可以接受真/假答案

OR(IF(ISNUMBER(SEARCH($G$1:$G$7,A1)),TRUE,FALSE))

或区分大小写

OR(IF(ISNUMBER(FIND($G$1:$G$7,A1)),TRUE,FALSE))

搜索字词的范围为G1:G7

请记住按CTRL + SHIFT + ENTER

答案 2 :(得分:0)

  1. 使用分隔符对您的单词列表进行排序,这些分隔符在单词f.e中不会出现。 |
  2. 在find调用中交换参数 - 我们希望搜索单元格值是否匹配模式字符串中的一个单词 {=FIND("cell I want to search","list of words I want to search for")}
  3. 如果模式相似,则存在获得比想要的更多结果的风险,我们通过添加&amp;“|”​​来限制正确的结果到测试的单元格值(适用于数组公式) 单元格G3可能包含:{=SUM(FIND($A$1:$A$100&"|";A3))} 这可以确保电子表格会比较像“cellvlaue”这样的字符串反对“pattern1 |”,“pattern2 |”其中排除了如pattern1 =“new added”,pattern2 =“added”之类的冲突(匹配“添加”的所有单元格的总和太高,包括匹配“新添加”的单元格的目标值,这将是合乎逻辑的误差)

答案 3 :(得分:0)

以防其他人觉得这有用:我发现,通过在我的搜索字词列表中添加一个初始空单元格,将返回零值而不是错误。

={INDEX(SearchTerms!$A$1:$A$38,MAX(IF(ISERROR(SEARCH(SearchTerms!$A$1:$A$38,SearchCell)),0,1)*((SearchTerms!$B$1:$B$38)+1)))}

NB:A列是搜索词,B列是行号索引。