我有两列数据。第一个有一些术语,另一个包含单个词。 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 :(得分:0)
我有一个部分解决方案:
=IF(1-ISERROR(SEARCH(" "&D2:D7&" "," "&A2&" ")),D2:D7&", ","")
此公式返回单元格中包含的单词数组(范围根据您的图片而定)。这个数组是稀疏的:它包含每个缺失单词的空字符串。并假设单词总是由一个空格分隔(如果需要,可以改进)。
但是,原生Excel函数无法连接数组,因此我认为仅使用原生公式是不可能的。
你需要VBA,但如果你使用VBA,你根本不应该打扰第一部分,因为你可以做任何事情。
答案 1 :(得分: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)
答案 2 :(得分:-1)
您可以创建一个包含您要在顶部找到的单词的表格,并使用公式填充每个单词下面的单元格(如果已找到)。见截图。
[编辑]我注意到它错误地拾起了&#34; board&#34;在&#34;黑板&#34;但这应该很容易修复。
=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)
取消最后一个逗号和空格
我已编辑此内容以解决&#34;黑板&#34;
的问题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),"")