Coisas que você deve saber sobre VLOOKUP

- Published on

Quando você precisa extrair informações de uma tabela, a função VLOOKUP do Excel é uma ótima solução. A capacidade de pesquisar e recuperar informações de uma tabela dinamicamente é um diferencial para muitos usuários, e você encontrará a função VLOOKUP em todos os lugares.
No entanto, embora a função VLOOKUP seja relativamente fácil de usar, muitas coisas podem dar errado. Um dos motivos é que a função VLOOKUP tem uma falha grave de design: por padrão, ela assume que você aceita uma correspondência aproximada. O que provavelmente não é o caso.
Isso pode gerar resultados que parecem completamente normais, mesmo estando totalmente incorretos. Acredite em mim, você NÃO vai querer explicar isso para o seu chefe depois que ele já tiver enviado sua planilha para a gerência.
Como funciona a função VLOOKUP
A função VLOOKUP permite pesquisar e recuperar dados em uma tabela. O "V" em VLOOKUP significa vertical, o que quer dizer que os dados na tabela devem estar organizados verticalmente, em linhas.
Se você tiver uma tabela bem estruturada, com informações organizadas verticalmente e uma coluna à esquerda que possa ser usada para encontrar uma linha correspondente, provavelmente poderá usar a função VLOOKUP.
A função VLOOKUP exige que a tabela esteja estruturada de forma que os valores de pesquisa apareçam na coluna mais à esquerda. Os dados que você deseja recuperar (valores de resultado) podem aparecer em qualquer coluna à direita. Ao usar a função VLOOKUP, imagine que cada coluna da tabela esteja numerada, começando da esquerda. Para obter um valor de uma coluna específica, basta fornecer o número correspondente como "índice da coluna". No exemplo abaixo, queremos pesquisar o endereço de e-mail, portanto, estamos usando o número 4 como índice da coluna:

Na tabela acima, os IDs dos funcionários estão na coluna 1 à esquerda e os endereços de e-mail estão na coluna 4 à direita.
Para usar a função VLOOKUP, você fornece 4 informações, ou "argumentos":
- O valor que você está procurando (lookup_value)
- O intervalo de células que compõem a tabela (table_array)
- O número da coluna da qual recuperar um resultado (column_index)
- O modo de correspondência (range_lookup, TRUE = approximate, FALSE = exact)
A função VLOOKUP só busca à direita
Talvez a maior limitação da função VLOOKUP seja que ela só pode buscar dados à direita.
Isso significa que a função VLOOKUP só pode obter dados das colunas à direita da primeira coluna da tabela. Quando os valores de pesquisa aparecem na primeira coluna (a mais à esquerda), essa limitação não faz muita diferença, já que todas as outras colunas já estão à direita. No entanto, se a coluna de pesquisa estiver dentro da tabela, você só poderá buscar valores nas colunas à direita dessa coluna. Você também precisará fornecer à função VLOOKUP uma tabela menor que comece com a coluna de pesquisa.

Você pode superar essa limitação usando INDEX e MATCH em vez de VLOOKUP.
VLOOKUP encontra a primeira correspondência
No modo de correspondência exata, se uma coluna de pesquisa contiver valores duplicados, o VLOOKUP encontrará apenas o primeiro valor. No exemplo abaixo, estamos usando VLOOKUP para encontrar um nome e o VLOOKUP está configurado para realizar uma correspondência exata. Embora haja duas "Janets" na lista, o VLOOKUP encontra apenas a primeira:

A função VLOOKUP não diferencia maiúsculas de minúsculas
Ao procurar um valor, a função VLOOKUP não processa o texto em maiúsculas e minúsculas de forma diferente. Para a função VLOOKUP, um código de produto como "PQRF" é idêntico a "pqrf". No exemplo abaixo, estamos procurando por "JANET" em maiúsculas, mas a função VLOOKUP não diferencia maiúsculas de minúsculas, então ela simplesmente encontra "Janet", já que essa é a primeira correspondência encontrada:

A função VLOOKUP possui dois modos de correspondência
Na maioria dos casos, você provavelmente desejará usar a função VLOOKUP no modo de correspondência exata. Isso faz sentido quando você quer pesquisar informações com base em uma chave exclusiva, por exemplo, informações de um produto com base em um código de produto ou dados de um filme com base em um título.

A fórmula em H6 para buscar o ano com base em uma correspondência exata do título do filme é:
=VLOOKUP(H4,B5:E9,2,FALSE) // FALSE = correspondência exata
No entanto, você deve usar o modo aproximado nos casos em que não está buscando uma correspondência por um ID exclusivo, mas sim a "melhor correspondência" ou a "melhor categoria". Por exemplo, talvez você esteja buscando o valor do frete com base no peso, a alíquota de imposto com base na renda ou a taxa de comissão com base no volume de vendas mensal. Nesses casos, provavelmente você não encontrará o valor exato na tabela. Em vez disso, você deve usar a função VLOOKUP para obter a melhor correspondência para um determinado valor.

A fórmula em D5 faz uma correspondência aproximada para recuperar a comissão correta:
=VLOOKUP(C5,$G$5:$H$10,2,TRUE) // TRUE = approximate match
Atenção: A função VLOOKUP usa correspondência aproximada por padrão
A correspondência exata e aproximada na função VLOOKUP é controlada pelo quarto argumento, chamado range_lookup. Esse nome não é intuitivo, então você terá que memorizar como ele funciona.
Para uma correspondência exata, use FALSE ou 0. Para uma correspondência aproximada, defina range_lookup como TRUE ou 1.
=VLOOKUP(value,table,column,TRUE) // correspondência aproximada
=VLOOKUP(value,table,column,FALSE) // correspondência exata
Infelizmente, o quarto argumento, range_lookup, é opcional e tem como valor padrão TRUE, o que significa que a função VLOOKUP fará uma correspondência aproximada por padrão. Ao fazer uma correspondência aproximada, a função VLOOKUP assume que a tabela está classificada e realiza uma busca binária. Durante uma busca binária, se a função VLOOKUP encontrar um valor de correspondência exata, ela retornará um valor dessa linha. Se, no entanto, a função VLOOKUP encontrar um valor maior que o valor de pesquisa, ela retornará um valor da linha anterior.
Esse é um comportamento padrão perigoso, pois muitas pessoas, sem saber, deixam a função VLOOKUP nesse modo, o que pode causar um resultado incorreto quando a tabela não está classificada.
Para evitar esse problema, certifique-se de usar FALSE ou zero como quarto argumento quando desejar uma correspondência exata.
Você pode forçar a função VLOOKUP a encontrar uma correspondência exata.
Para forçar a função VLOOKUP a encontrar uma correspondência exata, certifique-se de definir o quarto argumento (range_lookup) como FALSE ou zero. Estas duas fórmulas são equivalentes:
=VLOOKUP(value, data, column, FALSE)
=VLOOKUP(value, data, column, 0)
No modo de correspondência exata, quando a função VLOOKUP não encontra um valor, ela retorna #N/A. Isso indica claramente que o valor não foi encontrado na tabela.
Você pode instruir a função VLOOKUP a realizar uma correspondência aproximada.
Para usar a função VLOOKUP no modo de correspondência aproximada, omita o quarto argumento (range_lookup) ou forneça-o como TRUE ou 1. Estas 3 fórmulas são equivalentes:
=VLOOKUP(value, data, column)
=VLOOKUP(value, data, column, 1)
=VLOOKUP(value, data, column, TRUE)
Recomendo que você sempre defina o argumento range_lookup explicitamente, mesmo que a função VLOOKUP não o exija. Dessa forma, você sempre terá um lembrete visual do modo de correspondência esperado.
Para correspondências aproximadas, os dados devem estar classificados.
Se você estiver usando a correspondência no modo aproximado, seus dados devem estar classificados em ordem crescente pelo valor de pesquisa. Caso contrário, você poderá obter resultados incorretos. Além disso, esteja ciente de que, às vezes, os dados de texto podem parecer classificados, mesmo que não estejam.
A função VLOOKUP pode mesclar dados em tabelas diferentes
Um caso de uso comum para a função VLOOKUP é unir dados de duas ou mais tabelas. Por exemplo, imagine que você tenha dados de pedidos em uma tabela e dados de clientes em outra, e queira trazer alguns dados de clientes para a tabela de pedidos para análise:

Como o ID do cliente existe em ambas as tabelas, você pode usar esse valor para buscar os dados desejados com a função VLOOKUP. Basta configurar a VLOOKUP para usar o valor do ID na tabela 1 e os dados na tabela 2, com o índice de coluna necessário. No exemplo abaixo, estamos usando duas fórmulas VLOOKUP. Uma para buscar o nome do cliente e a outra para buscar o estado do cliente.

A função VLOOKUP pode classificar ou categorizar dados.
Se você precisar aplicar categorias arbitrárias a registros de dados, poderá fazê-lo facilmente com a função VLOOKUP, usando uma tabela que atua como "chave" para atribuir as categorias. Um exemplo clássico são as notas, onde você precisa atribuir uma nota com base em uma pontuação:

Neste caso, a função VLOOKUP está configurada para correspondência aproximada, portanto é importante que a tabela esteja classificada em ordem crescente.
Mas você também pode usar a função VLOOKUP para atribuir categorias arbitrárias. No exemplo abaixo, estamos usando a função VLOOKUP para calcular um grupo para cada departamento usando uma pequena tabela (chamada "key") que define o agrupamento.

Referências absolutas tornam a função VLOOKUP mais portátil
Em situações em que você planeja recuperar informações de mais de uma coluna em uma tabela, ou se precisar copiar e colar a função VLOOKUP, você pode economizar tempo e evitar frustrações usando referências absolutas para o lookup_value e a table_array. Isso permite copiar a fórmula e, em seguida, alterar apenas o número do índice da coluna para usar a mesma pesquisa para obter um valor de uma coluna diferente.
Por exemplo, como o lookup_value e a table_array são absolutos, podemos copiar a fórmula para todas as colunas e, em seguida, voltar e alterar o índice da coluna conforme necessário.
=VLOOKUP($B$3,$B$6:$F$15,2,0)

Intervalos nomeados tornam a função VLOOKUP mais fácil de ler (e mais portátil)
Intervalos absolutos são visualmente pouco atraentes, e você pode tornar suas fórmulas VLOOKUP muito mais limpas e fáceis de ler substituindo referências absolutas por intervalos nomeados, que são automaticamente absolutos.
Por exemplo, no exemplo de dados de funcionários acima, você pode nomear a célula de entrada como id e, em seguida, nomear os dados na tabela como data. Você pode escrever sua fórmula da seguinte forma:
=VLOOKUP(id,data,3,0)

A inserção de uma coluna pode quebrar fórmulas VLOOKUP existentes.
Se você tiver fórmulas VLOOKUP em uma planilha, elas podem ser interrompidas se você inserir uma coluna na tabela. Isso ocorre porque os valores de índice de coluna fixos não são alterados automaticamente quando colunas são inseridas ou excluídas.
Neste exemplo, as pesquisas para Rank e Sales foram interrompidas quando uma nova coluna foi inserida entre Year e Rank. Ano continua funcionando porque está à esquerda da coluna inserida.

Para evitar esse problema, você pode calcular um índice de coluna conforme descrito nas duas dicas seguintes.
Você pode usar ROW ou COLUMN para calcular um índice de coluna
Se você é do tipo que se incomoda com qualquer edição após copiar uma fórmula, pode usar ROW ou COLUMN para gerar índices de coluna dinâmicos. Se você estiver obtendo dados de colunas consecutivas, esse truque permite configurar uma fórmula VLOOKUP e copiá-la sem precisar fazer alterações.
Por exemplo, com os dados de funcionários abaixo, podemos usar a função COLUMN para gerar um índice de coluna dinâmico. Para a primeira fórmula na célula C3, a função COLUMN sozinha retornará 3 (porque a coluna C é a terceira na planilha), então basta subtrair um e copiar a fórmula:

Todas as fórmulas são idênticas e não requerem nenhuma edição posterior. A fórmula que estamos usando é esta:
=VLOOKUP(id, data, COLUMN()-1, 0)
Use VLOOKUP + MATCH para um índice de coluna totalmente dinâmico
Avançando um pouco mais na dica acima, você pode usar MATCH para pesquisar a posição de uma coluna em uma tabela e retornar um índice de coluna totalmente dinâmico.
Isso às vezes é chamado de pesquisa bidirecional, pois você está pesquisando tanto a linha quanto a coluna.
Um exemplo seria pesquisar as vendas de um vendedor em um determinado mês ou pesquisar o preço de um produto específico de um fornecedor específico.
Por exemplo, suponha que você tenha as vendas por mês, discriminadas por vendedor:

Observe que definimos um intervalo para a função MATCH que inclui todas as colunas da tabela, a fim de "sincronizar" os números das colunas usados pela função VLOOKUP.
=VLOOKUP(H2,data,MATCH(H3,months,0),0)
Observação: você frequentemente verá pesquisas bidirecionais feitas com INDEX e MATCH, uma abordagem que oferece mais flexibilidade e melhor desempenho em grandes conjuntos de dados.
A função VLOOKUP permite o uso de curingas para correspondência parcial
Sempre que você usa a função VLOOKUP no modo de correspondência exata, você tem a opção de usar curingas no valor de pesquisa. Pode parecer contraintuitivo, mas os curingas permitem que você faça uma correspondência exata com base em uma correspondência parcial.
O Excel oferece dois caracteres curinga: um asterisco * corresponde a um ou mais caracteres e um ponto de interrogação ? corresponde a um caractere.
Por exemplo, você pode digitar um asterisco diretamente em uma célula e se referir a ele como um lookup_value com a função VLOOKUP. Na tela abaixo, inserimos Mon* em H3, que é um intervalo nomeado chamado val. Isso faz com que a função VLOOKUP encontre o nome Monet.

A fórmula, neste caso, é simples:
=VLOOKUP(val,data,1,0)
Se desejar, você pode ajustar a fórmula VLOOKUP para usar um caractere curinga integrado, como no exemplo abaixo, onde simplesmente concatenamos o valor em H3 com um asterisco.

Neste caso, estamos concatenando o asterisco ao lookup_value dentro da função VLOOKUP:
=VLOOKUP(val&"*",data,1,0)
Observação: Tenha cuidado com os caracteres curinga e a função VLOOKUP. Eles oferecem uma maneira fácil de criar uma "correspondência superficial", mas também facilitam a identificação de correspondências incorretas.
Você pode capturar erros #N/A e exibir uma mensagem amigável
No modo de correspondência exata, a função VLOOKUP exibirá o erro #N/A quando nenhuma correspondência for encontrada. De certa forma, isso é útil porque indica definitivamente que não há correspondência na tabela de pesquisa. No entanto, os erros #N/A não são muito agradáveis de se ver, então existem várias maneiras de capturar esse erro e exibir outra mensagem.
Ao começar a usar a função VLOOKUP, você certamente encontrará o erro #N/A, que ocorre quando a função VLOOKUP não consegue encontrar uma correspondência.
Esse é um erro útil porque a função VLOOKUP informa claramente que não consegue encontrar o lookup_value. Neste exemplo, "Latte" não existe como uma bebida na tabela, então a função VLOOKUP retorna um erro #N/A.

A fórmula, neste caso, é uma correspondência exata completamente padrão:
=VLOOKUP(E6,data,2,0)
No entanto, erros #N/A não são muito agradáveis de se ver, então talvez você queira capturar esse erro e exibir uma mensagem mais amigável.
A maneira mais fácil de capturar erros com a função VLOOKUP é envolvê-la na função IFERROR. A função IFERROR permite "capturar" qualquer erro e retornar um resultado de sua escolha.
Para capturar esse erro e exibir uma mensagem de "Not found" em vez do erro, você pode simplesmente envolver a fórmula original dentro da função IFERROR e definir o resultado desejado:

Se lookup_value for encontrado, nenhum erro ocorrerá e a função VLOOKUP retornará um resultado normal. Aqui está a fórmula:
=IFERROR(VLOOKUP(E6,data,2,0),"Not found")
Números como texto podem causar um erro de correspondência
Às vezes, a tabela com a qual você está trabalhando pode conter números inseridos como texto. Se você estiver simplesmente recuperando números como texto de uma coluna em uma tabela, isso não importa. Mas se a primeira coluna da tabela contiver números inseridos como texto, você receberá um erro #N/A se o valor de pesquisa também não for texto. Por exemplo, no exemplo a seguir, os IDs da tabela de planetas são números inseridos como texto, o que faz com que a função VLOOKUP retorne um erro, já que o valor de pesquisa é o número 3:

Para resolver esse problema, você precisa garantir que o valor de pesquisa e a primeira coluna da tabela sejam do mesmo tipo de dados (ambos números ou ambos texto).
Uma maneira de fazer isso é converter os valores na coluna de pesquisa para números. Uma maneira fácil de fazer isso é adicionar zeros usando a opção "Colar especial". Se você não tiver controle sobre a tabela de origem, também pode ajustar a fórmula VLOOKUP para converter o lookup_value em texto, concatenando " " ao valor, da seguinte forma:
=VLOOKUP(id&"",planets,2,0)

Se você não tiver certeza de quando terá números e quando terá texto, poderá atender a ambas as situações envolvendo a função VLOOKUP em uma função IFERROR e escrevendo uma fórmula para lidar com os dois casos:
=IFERROR(VLOOKUP(id,planets,3,0),VLOOKUP(id&"",planets,3,0))
Você pode usar a função VLOOKUP para substituir instruções IF aninhadas
Um dos usos mais interessantes da função VLOOKUP é substituir instruções IF aninhadas. Se você já criou uma série de instruções IF aninhadas, sabe que elas funcionam bem, mas exigem um pouco de manipulação de parênteses. Você também precisa ter cuidado com a ordem em que trabalha, para não introduzir um erro lógico. Por exemplo, um uso comum de instruções IF aninhadas é atribuir notas com base em uma pontuação de algum tipo. No exemplo abaixo, você pode ver que uma fórmula foi criada com instruções IF aninhadas para fazer exatamente isso, usando a chave de nota à direita como guia.

A fórmula IF aninhada completa tem a seguinte aparência:
=IF(C5<64,"F",IF(C5<73,"D",IF(C5<85,"C",IF(C5<95,"B","A"))))
Isso funciona bem, mas observe que tanto a lógica quanto as notas reais estão embutidas na fórmula. Se a pontuação mudar por algum motivo, você precisará atualizar cuidadosamente uma fórmula e copiá-la para toda a tabela.
Por outro lado, a função VLOOKUP pode atribuir as mesmas notas com uma fórmula simples. Tudo o que você precisa fazer é garantir que a tabela de chave de notas esteja configurada para VLOOKUP (ou seja, ela deve estar classificada por nota e conter parênteses para lidar com todas as notas).
Depois de definir um intervalo nomeado key para a tabela de chave de notas, a fórmula VLOOKUP é muito simples e gera as mesmas notas que a fórmula IF aninhada original:

Com a tabela de notas denominada "key", temos uma fórmula VLOOKUP muito simples:
=VLOOKUP(C5,key,2,TRUE)
Uma grande vantagem dessa abordagem é que tanto a lógica quanto as pontuações estão integradas diretamente na tabela de notas. Se algo mudar, basta atualizar a tabela diretamente e as fórmulas VLOOKUP serão atualizadas automaticamente, sem necessidade de edição.
A função VLOOKUP só pode lidar com um único critério
Por definição, a função VLOOKUP só pode encontrar valores com base em uma única condição, que é fornecida como um valor de pesquisa na primeira coluna da tabela (a coluna de pesquisa).
Isso significa que você não pode facilmente fazer coisas como procurar um funcionário com o sobrenome "Smith" em "Accounting" ou procurar um funcionário com base no nome e sobrenome em colunas separadas.
No entanto, existem maneiras de contornar essa limitação. Uma solução alternativa é criar uma coluna auxiliar que concatene valores de diferentes colunas para criar valores de pesquisa que se comportem como várias condições. Por exemplo, aqui queremos encontrar o departamento e o grupo de um funcionário, mas o nome e o sobrenome aparecem em colunas separadas. Como podemos pesquisar ambos ao mesmo tempo?

Primeiro, adicione uma coluna auxiliar que simplesmente concatene o primeiro e o último nome:

Em seguida, configure a função VLOOKUP para usar uma tabela que inclua essa nova coluna e combine os nomes e sobrenomes para o lookup_value:

A fórmula final VLOOKUP pesquisa o nome e o sobrenome juntos, usando a coluna auxiliar como chave:
=VLOOKUP(C3&D3,data,4,0)
Duas funções VLOOKUP são mais rápidas que uma única função VLOOKUP
Pode parecer loucura, mas quando você tem um grande conjunto de dados e precisa de uma correspondência exata, pode acelerar bastante a função VLOOKUP adicionando outra função VLOOKUP à fórmula!
Contexto: imagine que você tenha muitos dados de pedidos, digamos, mais de 10.000 registros, e esteja usando a função VLOOKUP para buscar o total do pedido com base no ID do pedido. Então, você está usando algo como:
=VLOOKUP(order_id,order_data, 5, FALSE)
O "FALSE" no final força a função VLOOKUP a realizar uma correspondência exata. Você deseja uma correspondência exata porque existe a possibilidade de um número de pedido não ser encontrado. Nesse caso, a configuração de correspondência exata fará com que a função VLOOKUP retorne o erro #N/A.
O problema é que as correspondências exatas são muito lentas, pois o Excel precisa percorrer todos os valores de forma linear até encontrar uma correspondência ou não.
Por outro lado, as correspondências aproximadas são extremamente rápidas, pois o Excel consegue realizar o que chamamos de busca binária.
O problema com as buscas binárias, no entanto (ou seja, VLOOKUP no modo de correspondência aproximada), é que a função VLOOKUP pode retornar um resultado incorreto quando um valor não é encontrado. Pior ainda, o resultado pode parecer completamente normal, tornando o erro muito difícil de detectar.
A solução é usar a função VLOOKUP duas vezes, ambas no modo de correspondência aproximada. A primeira instância simplesmente verifica se o valor realmente existe. Se existir, outra função VLOOKUP é executada (novamente, no modo de correspondência aproximada) para buscar os dados desejados. Caso contrário, você pode retornar qualquer valor para indicar que nenhum resultado foi encontrado.
A fórmula final fica assim:
=IF(VLOOKUP(order_id,order_data,1,TRUE)=order_id, VLOOKUP(order_id,order_data,5,TRUE), "Missing")
Observação: seus dados precisam estar classificados para usar esse truque. É simplesmente uma maneira de se proteger contra valores de pesquisa ausentes, mantendo a rapidez da pesquisa.
A combinação de INDEX e MATCH pode fazer tudo o que VLOOKUP faz e muito mais.
Se você acompanha discussões sobre Excel online, provavelmente já se deparou com o debate entre VLOOKUP e INDEX /MATCH. A discussão pode ficar surpreendentemente acalorada. 🥵
A essência é a seguinte: INDEX + MATCH pode fazer tudo o que VLOOKUP (e HLOOKUP) fazem, com muito mais flexibilidade, ao custo de um pouco mais de complexidade. Portanto, aqueles que defendem INDEX + MATCH argumentam (com muita razão) que é melhor começar aprendendo INDEX e MATCH, já que isso oferece um conjunto de ferramentas melhor no final.
O argumento contra INDEX + MATCH é que requer duas funções em vez de uma, sendo inerentemente mais complexo para os usuários (especialmente os iniciantes) aprenderem e dominarem.
Minha opinião é que, se você usa o Excel com frequência, vai querer aprender a usar INDEX e MATCH. É uma combinação muito poderosa.
Mas também acho que você deveria aprender a função VLOOKUP, que você encontrará em todos os lugares, frequentemente em planilhas herdadas de outros usuários. Em situações simples, a função VLOOKUP resolve o problema perfeitamente, sem complicações.
Fique ligado
Seja um Expert em Growth
Receba insights práticos sobre marketing, dados, performance e tecnologia direto no seu email.