2016-06-07 57 views
-1

假设我想创建一个搜索某个字符串的查找函数,让我们说“dog; cat”,并且我希望它通过某个数组,然后返回该数组中的列b例如:在较短的字符串数组中搜索较长的字符串

Horse 5 
Cat 2 
Wolf 3 

所以在这个例子中,我期望得到“2”。 这可能吗?搜索网络的答案,但找不到有用的东西。 请注意我搜索的字符串可能很复杂,例如 - “狗;鲨鱼;猫;鸽子”......所以它必须是一个通用的解决方案。

任何帮助将不胜感激:)

+0

什么是细胞? –

+0

'搜索答案的网络,但找不到有用的东西'你搜索了什么?使用循环和数组相当容易。 – findwindow

+0

那么,我试图解决这个没有VBA参与。 – Lev

回答

1

有了这样的数据:

enter image description here

把 “长串” 中说D1E1输入:

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

enter image description here

注:

  • LOOKUP()返回 “猫”
  • VLOOKUP()得到相关的数字

通常我们使用搜索() ()MATCH()看大字符串是否包含一个小字符串....................在这种情况下我们想查找其中小字符串在大串!

+0

绝对惊人的解决方案。谢谢! – Lev

1

你可以分割你的阵列可以列出一个单独的行中的每个变量,然后使用VLOOKUP函数的每个值比较,以你的表。 (该表将必须首先分成按字母顺序排列)。

扩展你的例子,如果你分裂阵列插入列C,你可以列d的第一行中使用以下fomula:

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

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

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

试试这个UDF。

SearchFor是你想要找的。这是一个分隔的文本字符串,例如“猫;狗;马”。

Searchin的是要在看的单元格区域。

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

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 
1

这将工作,如果你总是返回一个数值:

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

为了您的数据。例如,search_range是抱着Horse, Cat, Wolf的范围内; search_for拥有“狗;猫”;而values_range是容纳5, 2, 3的范围。

希望有帮助