Excel:使用数组公式搜索特定字符串中的字符串列表?
我想在单元格中搜索单词列表。 我认为这可以作为一个数组公式:Excel:使用数组公式搜索特定字符串中的字符串列表?,excel,search,excel-formula,find,Excel,Search,Excel Formula,Find,我想在单元格中搜索单词列表。 我认为这可以作为一个数组公式: {=FIND(<list of words I want to search for>,<cell I want to search>)} {=FIND(,)} 但只有当我搜索的单元格中的单词位于我搜索的单词列表的第一行时,它才会找到匹配项。有没有办法写出一个通读整个列表的公式?我更希望它不只是返回真/假。我知道如何在单元格中搜索单词列表,并根据列表中的单词是否存在于单元格中返回TRUE/FALSE。我想知
{=FIND(<list of words I want to search for>,<cell I want to search>)}
{=FIND(,)}
但只有当我搜索的单元格中的单词位于我搜索的单词列表的第一行时,它才会找到匹配项。有没有办法写出一个通读整个列表的公式?我更希望它不只是返回真/假。我知道如何在单元格中搜索单词列表,并根据列表中的单词是否存在于单元格中返回TRUE/FALSE。我想知道找到了哪个单词,或者它的位置。如果没有找到匹配的单词,这将返回匹配的单词或错误。对于这个示例,我使用了以下内容 要搜索的单词列表:
G1:G7
要搜索的单元格:
A1
=INDEX(G1:G7,MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*(ROW(G1:G7)-ROW(G1)+1)))
按Ctrl+Shift+Enter键作为数组公式输入
这个公式的工作原理是首先查看单词列表以查找匹配项,然后记录单词在列表中的位置,如果找到,则记录为正值;如果未找到,则记录为负值。此数组中的最大值是找到的单词在列表中的位置。如果未找到单词,则将负值传递到INDEX()
函数,引发错误
要返回匹配单词的行号,可以使用以下命令:
=MAX(IF(ISERROR(FIND(G1:G7,A1)),-1,1)*ROW(G1:G7))
还必须按Ctrl+Shift+Enter键将其作为数组公式输入。如果没有找到匹配项,它将返回-1
{=FIND(“我要搜索的单元格”,“我要搜索的单词列表”)}
{=SUM(FIND($A$1:$A$100&“|”;A3))}
这确保了电子表格将比较字符串,如“cellvlaue |”与“pattern1 |”和“pattern2 |”等。这些字符串将排序冲突,如pattern1=“New added”,pattern2=“added”(匹配“added”的所有单元格的总和将过高,包括匹配“New added”的单元格的目标值,这将是一个逻辑错误)为像我这样的人添加此答案,对他们来说,正确/错误的答案是完全可以接受的
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键,以防其他人发现这一点很有用:我发现,通过在搜索词列表中添加一个初始空单元格,将返回一个零值而不是错误
={INDEX(SearchTerms!$A$1:$A$38,MAX(IF(ISERROR(SEARCH(SearchTerms!$A$1:$A$38,SearchCell)),0,1)*((SearchTerms!$B$1:$B$38)+1)))}
注意:A列有搜索词,B是行号索引。如果可以使用多个
FIND
调用,这可能会简单得多:例如,每个搜索的单词使用一个单元格。这是一种选择吗?或者,您可以编写一个VBA函数来处理此问题。是一个数组,每个单元格有一个字。这就是你的意思吗?我不知道VBA,但你知道有没有类似的VBA代码示例?谁否决了我,请提供一些反馈?如果你不知道VBA,请首先尝试在与要搜索的单元格数组相邻的每个单元格中执行FIND
。每个搜索的单词都会得到一个结果,然后可以随意使用该信息。哦,我明白了,对于我要搜索的每个单元格,执行一行查找,每个搜索的单词一个。只有一个问题:为什么要乘以(row(G1:G7)-row(G1)+1)
,而不是只乘以row(G1:G7)
?出于我的目的,我希望找到单词的行,所以我只使用了行(G1:G7)
。这是我使公式更一般的方法。INDEX
函数的第二个参数是数组中的相对位置,而不是固定的行号。因此,如果您的搜索词列表从G3
开始,那么单独使用行(G3:G9)
将返回不正确的结果。我添加了一个公式,该公式将返回匹配的行号,因为听起来您对此也很感兴趣。这在Excel 2010中不起作用,因为iError有两个必需参数。@dnLL您确定吗?听起来不对。搜索是不区分大小写的,或者只是=或(不是(ISERROR(搜索({“Word 1”、“Word 2”、“Word 3”},MyRange)))
。