1

我有两列数据。第一个包含一些术语,另一个包含单个单词。 是)我有的

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

我的问题在某种程度上类似于Excel 从搜索值在单元格内但不完全正确的范围中查找单元格,因为我需要确定第二列中出现了哪些单词并且可以有多个单词。

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

4

3 回答 3

0

我有一个部分解决方案:

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

此公式返回单元格中包含的单词数组(范围根据您的图片)。这个数组是稀疏的:它包含每个缺失单词的空字符串。并且它假设单词总是被一个空格分隔(如果需要,这可能会被改进)。

但是,本机 Excel 函数无法连接数组,因此我认为仅使用本机公式是不可能的。

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

于 2017-01-30T10:41:23.827 回答
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)
于 2017-01-30T11:52:16.787 回答
-1

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

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

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

去掉最后一个逗号和空格

截图

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

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

于 2017-01-30T11:16:04.013 回答