2011-11-29 26 views
12

我想搜索一个单元格的单词列表。 我想这会工作作为数组公式:Excel中:使用数组公式在特定字符串内搜索字符串列表?

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

但是,只有当这是在我搜索单元的字坐镇的话我在寻找名单的第一行中找到匹配。有没有什么办法可以编写一个能够查看整个列表的公式?而且我更喜欢它不只是返回TRUE/FALSE。我知道如何在单元格中搜索单词列表,并根据单元格中是否存在单词来返回TRUE/FALSE。我想知道哪个单词被找到,或者它的位置。如果没有找到匹配

+0

这可能会简单得多,如果你可以使用多个''FIND''来电:如使用每单词一个单词搜索。这是一个选择吗?或者,您可以编写一个VBA函数来处理这个问题。 –

+0

<我要搜索的单词列表>是一个数组,每个单元格包含一个单词。你是这个意思吗?我不知道VBA,但是你知道任何类似的VBA代码吗? –

+1

谁能低估我,请提供一些反馈? –

回答

26

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

的单词列表来搜索:G1:G7
细胞中进行搜索:A1

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

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

这个公式的工作原理是首先通过看单词的列表中找到匹配,然后记录在列表中为正值的字的位置,如果发现或为负值,如果它没有找到。该数组中的最大值是列表中找到的单词的位置。如果找不到任何词,则将负值传递给INDEX()函数,并引发错误。

要返回匹配单词的行号,可以使用以下命令:

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

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

+1

谢谢,这太棒了! –

+0

只有一个问题:为什么你乘以'(ROW(G1:G7)-ROW(G1)+1)'而不是'ROW(G1:G7)'?为了我的目的,我希望找到这个单词的行,所以我只用了'ROW(G1:G7)'。 –

+0

这是我使公式更一般的方法。 INDEX函数的第二个参数是数组中的相对位置,而不是固定的行号。因此,如果您的搜索字词列表以'G3'开始,而使用'ROW(G3:G9)'则会返回不正确的结果。 – Excellll

0
  1. 使用分隔符对您的词汇列表进行填写,这些分隔符在词语f.e中不会出现。 |在查找通话
  2. 交换参数 - 我们希望搜索时,如果单元格的值相匹配的模式字符串的话一个 {=FIND("cell I want to search","list of words I want to search for")}
  3. 如果模式是相似的,还有越来越多的结果比想的风险,我们限制只是正确结果通过添加&“|”要测试的单元格的值(用数组公式效果很好) 细胞G3可以包含:{=SUM(FIND($A$1:$A$100&"|";A3))} 这确保电子表格将比较字符串,如“cellvlaue |” againts“pattern1 |”,“pattern2 |”等等如pattern1 =“新增”,pattern2 =“added”(所有匹配“added”的单元格的总和过高,包括匹配“新添加”的单元格的目标值,这将是一个逻辑错误)
1

添加这个答案是像我这样的人真/假答案是完全可以接受的

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 + SHIT + Enter

+0

搜索不区分大小写 – Blechdose

+0

是的,错误的方式在那里,谢谢。编辑 –

+0

或简单地'= OR(NOT(ISERROR(SEARCH({“Word 1”,“Word 2”,“Word 3”},MyRange))))'。 – Morten