2017-01-30 52 views
1

我有两列数据。第一个词有一些词,另一个词包含单个词。 what I have查找单元格中有多少单词在数组中找到

我正在寻找一种方法来确定哪些单词从第一列每个单元出现在第二,这样的结果应该是这个样子(我不需要逗号): what I need

我的问题与Excel find cells from range where search value is within the cell类似,但并不完全,因为我需要确定哪些单词出现在第二列,并且可能有多个单词。

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

回答

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) 
+0

这正是我需要的,它的伟大工程!非常感谢! – Paula

0

我有一个部分解决方案:(范围都按您的图片)

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

此公式返回的包含在小区中的单词的数组。这个数组很稀疏:它包含每个丢失单词的空字符串。它假设单词总是被一个空格隔开(如果需要,这可能会得到改进)。

但是,本机Excel函数不能连接数组,因此我认为其余部分仅适用于本机公式。

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

-1

您可以创建一个表格,其中包含要在顶部找到的单词,并使用公式填充每个单词下面的单元格(如果找到)。看截图。

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

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

只需concatinate结果

=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),"") 

Screenshot 2