Eu fiz uma solução usando o VBA:
Public Function BikeSize(MinSize As Integer, MaxSize As Integer, datainput As String)
Dim dataoutput() As Variant
ReDim dataoutput(0)
BikeSize = 0
datasplitted = Split(datainput, " ")
arraysize = UBound(datasplitted)
j = 1
For i = 0 To arraysize
m = datasplitted(i)
If m >= MinSize And m <= MaxSize Then
ReDim Preserve dataoutput(j)
dataoutput(j) = m
j = j + 1
End If
If m = "sm" Or m = "med" Or m = "lg" Then
ReDim Preserve dataoutput(j)
dataoutput(j) = m
j = j + 1
End If
Next i
totalresults = UBound(dataoutput)
Select Case totalresults
Case 0
BikeSize = 0
Case 1
BikeSize = dataoutput(totalresults)
Case Else
For i = 1 To totalresults
wrongresult = wrongresult & dataoutput(i) & " - "
Next i
BikeSize = wrongresult
End Select
End Function
Você tem que abrir macros / Visual Basic, vá para Módulos _ > Adicione o módulo e cole o código no lado direito (veja também Como faço para adicionar o VBA no MS Office? ).
Então, se sua string estiver na célula A1 , seu valor mínimo em C1 , seu valor máximo em D1 e em B1 você simplesmente coloca =BikeSize(C1,D1,A1)
para obter o resultado.
Se a string não tiver um número correspondente, ela gerará um zero 0 .
Se a string tiver mais de um número correspondente, ela exibirá todas as correspondências separadas por um traço.
Ele também reconhece sm , med e lg .