Como já explicado nos comentários, o range_lookup
paramater de VLOOKUP
não é uma pesquisa difusa. Em vez disso, ele pressupõe que a lista está em ordem crescente e encontra a correspondência mais próxima.
Aqui está a fórmula de matriz que você deveria ter usado (entrou com CTRL
+ ALT
+ ENTER
) usado
{=IF(MIN(LEN(SUBSTITUTE($B2,$F$2:$F$8,"")))=MAX(LEN(SUBSTITUTE($B2,$F$2:$F$8,""))),"",INDEX($G$2:$G$8,MATCH(MIN(LEN(SUBSTITUTE($B2,$F$2:$F$8,""))),LEN(SUBSTITUTE($B2,$F$2:$F$8,"")),0)))}
E aqui está como funciona:
Uma parte da fórmula se repete bastante: LEN(SUBSTITUTE($B2,$F$2:$F$8,""))
(Eu só vou usar LEN(...)
no futuro para economizar espaço)
Ele nos fornece uma matriz de números inteiros com base na substituição de cada LookupValue
por espaços em branco no Description
e na medição do tamanho do resultado. Quanto menor o comprimento, mais o texto é correspondido. Tomando o MIN
desse array nos informa o maior LookupValue
que existe no Description
. Obviamente, isso também significa que THE HOME D
será sempre vencido por THE HOME DESIGNERS
ou algo assim, tenha cuidado / exija seu campo LookupValue
.
Tirando essa parte do caminho, vamos mostrar a fórmula assim para simplificar:
{=IF(MIN(LEN(...)))=MAX(LEN(...))),"",INDEX($G$2:$G$8,MATCH(MIN(LEN(...))),LEN(...)),0)))}
A primeira parte IF(MIN=MAX)
verifica se pelo menos um dos registros LookupValue
existe na descrição. Se nada acontecer, o SUBSTITUTE
não fará nada e todo LEN
será o mesmo.
INDEX($G$2:$G$8,MATCH(MIN(LEN(...))),LEN(...)),0))
Assim que passarmos nessa verificação, a carne real estará na combinação INDEX
+ MATCH
. Combinamos o menor comprimento (ou seja, o maior LookupValue
que existe no Description
) no array de comprimentos para usar o primeiro LookupValue
que foi encontrado. Conecte isso em uma matriz do DecodeValue
e saia do valor Notes
que você deseja.
O ponto chave é tornar seu campo LookupValue
o mais longo e exato possível para evitar correspondências duplicadas e, então, tudo deve funcionar bem.
Esta é a versão do CSV dos meus resultados:
Line,Description,Notes,ExpectedValue,Valid,LookupValue,DecodeValue
1,DDA PUR ATTPAYMEN 800-331-0500 TX 300100860296,Utilities:Telephone,Utilities:Telephone,OK,ATTPAY,Utilities:Telephone
2,DDA PUR THE HOME D MILWAUKEE WI,Repairs,Repairs,OK,NETFLIX,Supplies:Research
3,DDA PUR STONE CREE SHOREWOOD WI,Craft Service,Craft Service,OK,PAYPAL,Supplies
4,DDA PUR STONE CREE SHOREWOOD WI,Craft Service,Craft Service,OK,STONE CREE,Craft Service
5,DDA PUR WALGREENS SHOREWOOD WI,Medical,Medical,OK,WALGREENS,Medical
6,DDA PUR STONE CREE SHOREWOOD WI,Craft Service,Craft Service,OK,THE HOME D,Repairs
7,DDA PUR STONE CREE SHOREWOOD WI,Craft Service,Craft Service,OK,USPS,Postage and Shipping
8,DDA PUR NETFLIX.CO NETFLIX.COM CA,Supplies:Research,Supplies:Research,OK,,
9,PAYPAL INST XFER,Supplies,Supplies,OK,,
10,PAYPAL INST XFER,Supplies,Supplies,OK,,
11,PAYPAL INST XFER,Supplies,Supplies,OK,,
12,PAYPAL INST XFER,Supplies,Supplies,OK,,
13,PAYPAL INST XFER,Supplies,Supplies,OK,,
14,DDA PUR THE HOME D MILWAUKEE WI,Repairs,Repairs,OK,,
15,DDA PUR USPS 56064 MILWAUKEE WI,Postage and Shipping,Postage and Shipping,OK,,