Você deseja a função FIND()
e / ou SEARCH()
.
Uso:
FIND(find_text, within_text)
returns the starting position of the first text string
within the second text string (starting at position 1)
Então FIND("lunch", "lunch with customer")
retorna 1,
e FIND("lunch", "business lunch")
retorna 10.
Se a primeira cadeia não for encontrada na segunda, isso retornará um valor de erro #VALUE!
.
SEARCH()
é como FIND()
, exceto pelo fato de que FIND()
faz distinção entre maiúsculas e minúsculas
e SEARCH()
não é. Então
FIND("lunch", "Lunch with customer")
returns#VALUE!
butSEARCH("lunch", "Lunch with customer")
returns 1
Suponho que você desejará usar SEARCH()
, o insensível a maiúsculas e minúsculas.
Você desejará configurar uma matriz assim:
Provavelmente,émelhorfazerissoemumafolhaseparada;vamoschamá-loKey-Sheet
.Emseguida,nafolhadedados:SeadescriçãodeformalivreestivernacolunaA
(iniciandonacélulaA1
),insiraoseguintenacélulaB1
:
=MATCH(MIN(IFERROR(SEARCH('Key-Sheet'!$A$1:$A$7,$A1),LEN($A1)+1)),SEARCH('Key-Sheet'!$A$1:$A$7,$A1))
epressioneCtrl+Deslocamento+Enter,paratorná-louma“fórmuladematriz”.(Eleseráexibidonabarradefórmulasentrechaves.)Explicação:
SEARCH('Key-Sheet'!$A$1:$A$7,$A1)
-paracadapalavra-chavedacolunaA
daplanilhadechaves(“café”,“almoço”,“jantar”,etc…),procureporelanadescriçãodalinhaatual,colunaA
,deafolhadedados(porexemplo,“almoçodenegócios”).Issocriaráumamatrizcontendo{#VALUE!
;%código%;%código%;…}(seteelementos(nesteexemplo),umporpalavra-chave;osegundomostraoresultadopara"almoço", que está em10
).-
#VALUE!
- substitua'Key-Sheet'!A2
valores porIFERROR(…,LEN($A1)+1)
, que, sendo#VALUE!
, possivelmente não pode ser um valor de retorno válido de15
(e que, na verdade, é maior que qualquer valor de retorno válido possível deLEN("business lunch")+1
), mas que é um número válido. Então agora nosso array é {SEARCH()
; %código%; %código%; …}. -
SEARCH()
- extrai o valor mínimo da matriz: neste exemplo,15
. Em geral, esse será o (primeiro) retorno bem-sucedido de10
. -
15
- note que o segundo parâmetro paraMIN(…)
é o mesmo que o primeiro marcador, acima. Então, estamos procurando10
na matriz {SEARCH()
; %código%; %código%; …} Isso retorna a posição do=MATCH(…, …)
, que é 2, correspondendo ao fato de queMATCH()
na folha de dados (“almoço de negócios”) contém “almoço”, que está na segunda linha da folha de chaves.
Para obter a categoria de despesas,
é uma simples questão de indexação na coluna 10
da folha de chave.
Defina a célula #VALUE!
para 10
.
(Isso não precisa ser uma fórmula de matriz.)
Observe(comoprevistoacima)que,seumadescriçãodedespesacontiverváriaspalavras-chave,elaencontraráapenasaprimeira.
Sevocênãoquerseincomodarcomovalorintermediário,bastacalcular
=OFFSET('Key-Sheet'!$B$1,MATCH(MIN(IFERROR(SEARCH('Key-Sheet'!$A$1:$A$6,$A1),LEN($A1)+1)),SEARCH('Key-Sheet'!$A$1:$A$6,$A1))-1,0)
Issofazprecisaserumafórmuladematriz.
P.S.asfunções#VALUE!
e10
têmumterceiroargumentoopcional:
SEARCH(find_text,within_text,[start_num])
Então
SEARCH("cigar", "Sometimes a cigar is just a cigar.")
returns 13
butSEARCH("cigar", "Sometimes a cigar is just a cigar.", 17)
returns 29
Não vejo nenhum motivo para você usá-lo.