2016-06-07 55 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的範圍。

希望有幫助