查找在数组中找到了单元格中的多少个单词
Find how many words from cell are found in an array
我有两列数据。第一个有一些术语,另一个包含单个单词。
what I have
我正在寻找一种方法来识别第一列中每个单元格中的哪些词出现在第二列中,因此结果应该如下所示(我不需要逗号):
what I need
我的问题在某种程度上类似于 Excel find cells from range where search value is within the cell 但不完全相同,因为我需要确定第二列中出现了哪些词,并且可以有多个词。
我也试过=INDEX($D:$D;MATCH(1=1;INDEX(ISNUMBER(SEARCH($D:$D;A2));0);))
但它也 returns 只有一个字。
我有一个部分解决方案:
=IF(1-ISERROR(SEARCH(" "&D2:D7&" "," "&A2&" ")),D2:D7&", ","")
这个公式 returns 单元格中包含的单词数组(范围根据您的图片)。这个数组是稀疏的:它包含每个缺失单词的空字符串。并且它假定单词总是由一个 space 分隔(如果需要,这可能会有所改进)。
但是,原生 Excel 函数无法连接数组,因此我认为仅使用原生公式无法实现其余功能。
您可能需要 VBA,但如果您使用 VBA,您根本不需要为第一部分操心,因为您可以做任何事情。
您可以创建一个 table,其中包含您要在顶部查找的字词,如果找到,则使用公式填充每个字词下方的单元格。见截图。
[edit] 我注意到它在 "blackboard" 中错误地选择了 "board" 但这应该很容易修复。
=IFERROR(IF(FIND(C,$A2,1)>0,C & ", "),"")
简单地连接结果
=CONCATENATE(C2,D2,E2,F2,G2,H2)
或
=LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2))-2)
去掉最后一个逗号和space
我对此进行了编辑以解决 "blackboard"
的问题
C2 的新公式
=IF(OR(C=$A2,ISNUMBER(SEARCH(" "&C&" ",$A2,1)),C & " "=LEFT($A2,LEN(C)+1)," " & C=RIGHT($A2,LEN(C)+1)),C & ", ","")
如果没有单词,B2 捕获错误的新公式
=IFERROR(LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2,I2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2,I2))-2),"")
如果你愿意使用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 table 使用它:
=SearchForWords(A2;$D:$D)
我有两列数据。第一个有一些术语,另一个包含单个单词。 what I have
我正在寻找一种方法来识别第一列中每个单元格中的哪些词出现在第二列中,因此结果应该如下所示(我不需要逗号): what I need
我的问题在某种程度上类似于 Excel find cells from range where search value is within the cell 但不完全相同,因为我需要确定第二列中出现了哪些词,并且可以有多个词。
我也试过=INDEX($D:$D;MATCH(1=1;INDEX(ISNUMBER(SEARCH($D:$D;A2));0);))
但它也 returns 只有一个字。
我有一个部分解决方案:
=IF(1-ISERROR(SEARCH(" "&D2:D7&" "," "&A2&" ")),D2:D7&", ","")
这个公式 returns 单元格中包含的单词数组(范围根据您的图片)。这个数组是稀疏的:它包含每个缺失单词的空字符串。并且它假定单词总是由一个 space 分隔(如果需要,这可能会有所改进)。
但是,原生 Excel 函数无法连接数组,因此我认为仅使用原生公式无法实现其余功能。
您可能需要 VBA,但如果您使用 VBA,您根本不需要为第一部分操心,因为您可以做任何事情。
您可以创建一个 table,其中包含您要在顶部查找的字词,如果找到,则使用公式填充每个字词下方的单元格。见截图。
[edit] 我注意到它在 "blackboard" 中错误地选择了 "board" 但这应该很容易修复。
=IFERROR(IF(FIND(C,$A2,1)>0,C & ", "),"")
简单地连接结果
=CONCATENATE(C2,D2,E2,F2,G2,H2)
或
=LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2))-2)
去掉最后一个逗号和space
我对此进行了编辑以解决 "blackboard"
的问题C2 的新公式
=IF(OR(C=$A2,ISNUMBER(SEARCH(" "&C&" ",$A2,1)),C & " "=LEFT($A2,LEN(C)+1)," " & C=RIGHT($A2,LEN(C)+1)),C & ", ","")
如果没有单词,B2 捕获错误的新公式
=IFERROR(LEFT(CONCATENATE(C2,D2,E2,F2,G2,H2,I2),LEN(CONCATENATE(C2,D2,E2,F2,G2,H2,I2))-2),"")
如果你愿意使用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 table 使用它:
=SearchForWords(A2;$D:$D)