在较短字符串数组中搜索较长的字符串

时间:2016-06-07 14:47:52

标签: excel

假设我想创建一个搜索某个字符串的查找函数,让我们说“dog; cat”,我希望它通过某个数组,并返回该数组中与该字符串部分匹配的行中的列b,例如:

Horse 5
Cat   2
Wolf  3

所以在这个例子中,我希望得到“2”。 可能吗?搜索网络寻找答案,但找不到任何有用的信息。 请注意我正在搜索的字符串可能很复杂,例如 - “dog; shark; cat; pigeon”......所以它必须是一个通用的解决方案。

任何帮助将不胜感激:)

4 个答案:

答案 0 :(得分:1)

您可以拆分数组以在单独的行中列出每个变量,然后使用VLOOKUP函数将每个值与表进行比较。 (该表必须先按字母顺序排序。)

扩展您的示例,如果将数组拆分为C列,则可以在D列的第一行使用以下公式:

=VLOOKUP(C1,$A$1:$B$3,2,FALSE)

使用查找表的绝对引用将允许您将公式复制到其他行中。建议值的结果为:

Cat   | 2 | dog | #N/A
Horse | 5 | cat | 2
Wolf  | 3 | 

答案 1 :(得分:1)

使用以下数据:

enter image description here

将“长字符串”放在 D1 E1 中输入:

=VLOOKUP(LOOKUP(9.99999999999999E+307,SEARCH($A$1:$A$6,D1),$A$1:$A$6),A1:B6,2,FALSE)

enter image description here

<强> 注意:

  • LOOKUP()返回“cat”
  • VLOOKUP()获取相关数字

通常我们使用 SEARCH() FIND() MATCH()来查看大字符串是否包含一个小字符串。 ..................在这种情况下,我们希望在大字符串中找到哪个小字符串!

答案 2 :(得分:1)

尝试使用此UDF。

SearchFor是您想要找到的。这是一个分隔的文本字符串,例如“cat; dog; horse”。

SearchIn是您要查看的单元格区域。

最后一个参数是分割SearchFor变量的分隔符。在上面的例子中,“cat; dog; horse”的分隔符将是“;”。

Public Function FindString(SearchFor As String, _
                           SearchIn As Range, _
                           Delim As String) as String

    Dim MyArray()       As String
    Dim i               As Long
    Dim FoundCounter    As Long
    Dim Position        As Long

    MyArray = Split(SearchFor, Delim, , vbTextCompare)

    FoundCounter = 0
    For i = UBound(MyArray) To LBound(MyArray) Step -1
        Do
            If FoundCounter = 0 Then
                Position = InStr(1, SearchIn.Value, MyArray(i), vbTextCompare)
            Else
                Position = InStr(Position + 1, SearchIn.Value, MyArray(i), vbTextCompare)
            End If

            If Position = 0 Then
                Exit Do
            Else
                FoundCounter = FoundCounter + 1
            End If
        Loop
        FindString = MyArray(i) & " " & FoundCounter & " " & FindString
        FoundCounter = 0
    Next i

End Function

答案 3 :(得分:1)

如果你总是返回一个数值,这将有效:

=SUM(IF(ISERR(SEARCH(search_range,search_for,1)),"",values_range))

对于您的示例数据,search_range是持有Horse, Cat, Wolf的范围; search_for持有&#34; dog; cat&#34 ;;和values_range是持有5, 2, 3的范围。

希望有所帮助