在Excel中查找列表的第一个和第二个匹配项

我有列中的文本单元格,我有一个单词列表,我需要获得文本单元格的第一个和第二个匹配的单词使用公式没有vba的单词列表中。

这里是结果的一个例子

如果您的文本单元格以A2开头,则:

First Match B2: =IFERROR(MID($A2,AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A)),FIND(" ",$A2&" ",AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A)))-AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A))),"") 

并填写一个单元格以获得第二个匹配。 然后根据需要填写。

在这里输入图像说明

编辑: OP已经添加了一个额外的要求,与单词内的单词排除,例如,如果单词是Calso also不会发现; 也不要返回标点符号。

虽然在公式中很麻烦,但这可以通过以下方式来处理: – 用spacereplace所有的标点符号 – 在句子的开头和结尾添加空格 – 在LIST的每个单词的开始和结尾处添加空格 – 将公式调整为不返回额外的空间。

上述操作可以通过修改定义的名称LIST来完成,也可以使用定义的公式名称来进行标点符号replace以及空格前缀和后缀。

鉴于上面的例子,我们重新定义LIST

 LIST refers to: =" " & Sheet1!$F$2:$F$6 & " " 

并且,select第2行中的某个单元格,我们定义该theSentence

 theSentence refers to: =" " & TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A10,","," "),"'"," "),"."," "),"!"," "))& " " 

这个特定的定义将删除逗号,撇号,句号和感叹号。 如果你需要删除其他标点符号,你可以嵌套更多的SUBSTITUTE

我们在B2中对公式做一些修改:

 B2: =IFERROR(MID(theSentence,1+AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A)),FIND(" ",theSentence,1+AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A)))-AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A))-1),"") 

这是对问题的第二种解释(在文本中的任意位置查找string列表中的第一个和第二个匹配项)。

 =IFERROR(INDEX($F$2:$F$6,SMALL(IF(ISNUMBER(FIND(" "&$F$2:$F$6&" "," "&$A2&" ")),ROW($F$2:$F$6)-ROW($F$1)),COLUMNS($A1:A1))),"") 

请注意,这是一个数组公式,必须使用Ctrl Shift Enter进行input

在这里输入图像说明