假設我想創建一個搜索某個字符串的查找函數,讓我們說「dog; cat」,並且我希望它通過某個數組,然後返回該數組中的列b例如:在較短的字符串數組中搜索較長的字符串
Horse 5
Cat 2
Wolf 3
所以在這個例子中,我期望得到「2」。 這可能嗎?搜索網絡的答案,但找不到有用的東西。 請注意我搜索的字符串可能很複雜,例如 - 「狗;鯊魚;貓;鴿子」......所以它必須是一個通用的解決方案。
任何幫助將不勝感激:)
假設我想創建一個搜索某個字符串的查找函數,讓我們說「dog; cat」,並且我希望它通過某個數組,然後返回該數組中的列b例如:在較短的字符串數組中搜索較長的字符串
Horse 5
Cat 2
Wolf 3
所以在這個例子中,我期望得到「2」。 這可能嗎?搜索網絡的答案,但找不到有用的東西。 請注意我搜索的字符串可能很複雜,例如 - 「狗;鯊魚;貓;鴿子」......所以它必須是一個通用的解決方案。
任何幫助將不勝感激:)
有了這樣的數據:
把 「長串」 中說D1和E1輸入:
=VLOOKUP(LOOKUP(9.99999999999999E+307,SEARCH($A$1:$A$6,D1),$A$1:$A$6),A1:B6,2,FALSE)
注:
通常我們使用搜索() ()或MATCH()看大字符串是否包含一個小字符串....................在這種情況下我們想查找其中小字符串在大串!
絕對驚人的解決方案。謝謝! – Lev
你可以分割你的陣列可以列出一個單獨的行中的每個變量,然後使用VLOOKUP函數的每個值比較,以你的表。 (該表將必須首先分成按字母順序排列)。
擴展你的例子,如果你分裂陣列插入列C,你可以列d的第一行中使用以下fomula:
=VLOOKUP(C1,$A$1:$B$3,2,FALSE)
使用對查找表的絕對引用將允許您將公式複製到其他行中。您的建議值,結果將是:
Cat | 2 | dog | #N/A
Horse | 5 | cat | 2
Wolf | 3 |
試試這個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
這將工作,如果你總是返回一個數值:
=SUM(IF(ISERR(SEARCH(search_range,search_for,1)),"",values_range))
爲了您的數據。例如,search_range是抱着Horse, Cat, Wolf
的範圍內; search_for擁有「狗;貓」;而values_range是容納5, 2, 3
的範圍。
希望有幫助
什麼是細胞? –
'搜索答案的網絡,但找不到有用的東西'你搜索了什麼?使用循環和數組相當容易。 – findwindow
那麼,我試圖解決這個沒有VBA參與。 – Lev