在数组中find单元格中有多less单词

我有两列数据。 第一个词有一些词,另一个词包含单个词。 我拥有的

我正在寻找一种方法来确定第一列的每个单元格中的哪些单词出现在第二列中,所以结果应该如下所示(我不需要逗号): 我需要什么

我的问题有点类似于Excel查找单元格范围内的search值是在单元格内,但不完全,因为我需要确定哪些单词出现在第二列,可以有多个单词。

我也试过=INDEX($D$2:$D$7;MATCH(1=1;INDEX(ISNUMBER(SEARCH($D$2:$D$7;A2));0);))但它也只返回一个字。

如果你愿意使用VBA,那么你可以定义一个用户定义的函数:

 Public Function SearchForWords(strTerm As String, rngWords As Range) As String Dim cstrDelimiter As String: cstrDelimiter = Chr(1) ' A rarely used character strTerm = cstrDelimiter & Replace(strTerm, " ", cstrDelimiter) & cstrDelimiter ' replace any other possible delimiter here SearchForWords = vbNullString Dim varWords As Variant: varWords = rngWords.Value Dim i As Long: For i = LBound(varWords, 1) To UBound(varWords, 1) Dim j As Long: For j = LBound(varWords, 2) To UBound(varWords, 2) If InStr(1, strTerm, cstrDelimiter & varWords(i, j) & cstrDelimiter) <> 0 Then SearchForWords = SearchForWords & varWords(i, j) & ", " End If Next j Next i Dim iLeft As Long: iLeft = Len(SearchForWords) - 2 If 0 < iLeft Then SearchForWords = Left(SearchForWords, Len(SearchForWords) - 2) End If End Function 

你可以像这样从Excel表中使用它:

 =SearchForWords(A2;$D$2:$D$7) 

我有一个部分的解决scheme:

 =IF(1-ISERROR(SEARCH(" "&D2:D7&" "," "&A2&" ")),D2:D7&", ","") 

此公式返回单元格中包含的单词的数组(范围根据您的图片)。 这个数组是稀疏的:它包含每个丢失的单词的空string。 它假定单词总是被一个空格隔开(如果需要,这可能会得到改进)。

但是,本机Excel函数不能串联一个数组,所以我认为剩下的不可能只用原生公式。

你需要VBA,但是如果你使用VBA,你根本不应该打扰第一部分,因为你可以做任何事情。

您可以创build一个表格,在顶部find要查找的单词,如果find,则使用公式填充每个单词下面的单元格。 看截图。

我注意到,它在“黑板”中错误地拾取“板子”,但应该很容易修复。

 =IFERROR(IF(FIND(C$1,$A2,1)>0,C$1 & ", "),"") 

简单地分析结果

 =CONCATENATE(C2,D2,E2,F2,G2,H2) 

要么

 =LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2))-2) 

去掉最后的逗号和空格

Sceenshot

我已经编辑这个解决与“黑板”的问题

C2的新公式

 =IF(OR(C$1=$A2,ISNUMBER(SEARCH(" "&C$1&" ",$A2,1)),C$1 & " "=LEFT($A2,LEN(C$1)+1)," " & C$1=RIGHT($A2,LEN(C$1)+1)),C$1 & ", ","") 

如果没有词汇的话,B2的新公式可以捕捉到错误

 =IFERROR(LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2,I2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2,I2))-2),"") 

截图2