Verifique com qual palavra-chave, em uma lista, uma célula começa e retorne a palavra-chave correspondente

Verifique com qual palavra-chave, em uma lista, uma célula começa e retorne a palavra-chave correspondente

Estou tentando pegar uma lista de produtos e extrair o fabricante do início do nome do produto. Cada nome de produto começa com seu fabricante. Isso é complicado pelo fato de alguns itens terem outros fabricantes no corpo do nome; Preciso ver com o que o item começa. Estou lidando com mais de 50.000 itens e mais de 3.000 fabricantes. A fórmula que tenho até agora é:

=LOOKUP(1,1/(FIND($C$2:$C$5,B2)),$C$2:$C$5)

Isso funciona algumas vezes, mas não outras. Por exemplo, na planilha abaixo, as linhas 2 e 3 estão corretas, mas a linha 4 não. O resultado na célula  A4para “Mike's Fun Toys” (na célula B4) deveria ser “Mike's”, mas aparece como “Fun”.

Planilha com fabricantes listados em ordem alfabética inversa

(Aqui estão os dados em formato de texto que você pode copiar e colar:

+---+---------+-----------------+---------------+
|   |    A    |        B        |       C       |
+---+---------+-----------------+---------------+
| 1 | Formula | Items           | Manufacturers |
+---+---------+-----------------+---------------+
| 2 | Brown   | Brown Cat Toys  | Mike's        |
| 3 | Cat     | Cat Fun Toys    | Fun           |
| 4 | Fun     | Mike's Fun Toys | Cat           |
| 5 |         |                 | Brown         |
+---+---------+-----------------+---------------+

)

Mas quando mudo a ordem da Coluna  C(Fabricantes):

Planilha com fabricantes listados em ordem alfabética (normal)

a linha 4 fica correta (“de Mike”), mas a linha 2 dá errado.

A coluna A tem a fórmula inteira. Resultados esperados:

A2 - Brown
A3 - Cat
A4 - Mike's

Como posso fazer a fórmula funcionar independentemente da ordem de Column  C?

Responder1

Para o benefício dos leitores que não entendem a fórmula de RyanMark, é

  • Encontrar a posição de cada um dos nomes dos fabricantes em um determinado nome de produto. Isto resulta em
    • um valor de 1para o nome do fabricante que inicia o nome do produto (porque aparece no1primeiro personagem),
    • números mais altos para nomes de outros fabricantes que aparecem no nome do produto (porque aparecem mais tarde, em números de posição mais altos), e
    • um #VALUE!código de erro para nomes de fabricantes que não aparecem no nome do produto.
  • Invertendo cada um dos itens acima (dividindo 1 por ele), resultando em
    • 1para o nome do fabricante que inicia o nome do produto (que é aquele que queremos encontrar),
    • números positivos mais baixos para nomes de outros fabricantes que aparecem no nome do produto (porque 1 dividido por um número maior que 1 produz uma proporção menor que 1) e
    • um #VALUE!código de erro para nomes de fabricantes que não aparecem no nome do produto.
  • Usando LOOKUPpara encontrar o 1acima.

Por exemplo, para cell A4(correspondente a “Mike's Fun Toys” em cell B4), na primeira imagem, obtemos, em ordem,

  • 1, porque “Mike's” ( C2) começa com “Mike's Fun Toys”,
  • 8, porque “Fun” ( C3) aparece no 8º personagem de “Mike's Fun Toys”, e
  • #VALUE!e #VALUE!, porque “Cat” ( C4) e “Brown” ( C5) não aparecem em “Mike's Fun Toys”.

Inverter isso resulta em 1,  0.125( 1/8)  #VALUE!e #VALUE!. Então ele procura o 1nesse array. Este “deveria” funcionar, porque 1é o primeiro resultado, e “Mike” é o primeiro nome em Column  C.

O problema pode ser visto na página de ajuda para LOOKUP:

Para oOLHO PARA CIMApara que a função funcione corretamente, os dados consultados deverão ser ordenados em ordem crescente.

e claramente 1seguido por 0.125não está classificado em ordem crescente.

Como LOOKUPsugere, podemos resolver isso usando MATCH. A fórmula que você deseja, que usa a mesma abordagem básica da sua fórmula (exceto sem a inversão, que é desnecessária), é

=INDEX($C$2:$C$5, MATCH(1, FIND($C$2:$C$5,$B2), 0))

O terceiro argumento MATCHé chamado “match_type”. Eu configurei 0aqui, o que significa que MATCHprocurará o primeiro elemento na matriz que é exatamente 1e não assumirá que a matriz está classificada.

Esta é uma fórmula de matriz, então você deve pressionar Ctrl+ Shift+ Enter ao inseri-la.

informação relacionada