假设我想创建一个搜索某个字符串的查找函数,让我们说“dog; cat”,我希望它通过某个数组,并返回该数组中与该字符串部分匹配的行中的列b,例如:
Horse 5
Cat 2
Wolf 3
所以在这个例子中,我希望得到“2”。 可能吗?搜索网络寻找答案,但找不到任何有用的信息。 请注意我正在搜索的字符串可能很复杂,例如 - “dog; shark; cat; pigeon”......所以它必须是一个通用的解决方案。
任何帮助将不胜感激:)
答案 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)
使用以下数据:
将“长字符串”放在 D1 和 E1 中输入:
=VLOOKUP(LOOKUP(9.99999999999999E+307,SEARCH($A$1:$A$6,D1),$A$1:$A$6),A1:B6,2,FALSE)
<强> 注意: 强>
通常我们使用 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
的范围。
希望有所帮助