Eu tenho uma função curta definida pelo usuário que, dada uma string e um conjunto de possíveis substrings em uma coluna, retornará a posição da primeira substring encontrada.
Pediram-me para substituir o UDF por uma fórmula não VBA.
Option Explicit
Public Function Locate(s As String, rng As Range) As Variant
Dim pos As Long, p As Long, cell As Range
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
Locate = CVErr(xlErrNA)
pos = 999999
For Each cell In rng
p = InStr(s, cell.Text)
If p > 0 Then
pos = wf.Min(pos, p)
End If
Next cell
If pos <> 999999 Then Locate = pos
End Function
Aqui está um exemplo:
As substrings estão na coluna F . A função encontra b e q e retorna 5 porque q vem primeiro.
Eu tenho uma fórmula que funciona para uma instância específica:
=MIN(FIND({"a","b","c","d","q"},A1 & "abcdq",1))
Tenho tentado encontrar uma maneira de substituir o {"a","b","c","d","q"}
e "abcdq"
por uma referência a um intervalo de células, mas estou perplexo.
usar CONCAT: