假设我想创建一个搜索某个字符串的查找函数,让我们说“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