O PROCV é a função de busca mais usada no Excel, mas tem uma limitação conhecida: ele só busca na primeira coluna de um intervalo e só retorna valores de colunas à direita. Quando você precisa buscar em qualquer coluna e retornar valores à esquerda ou à direita, o PROCV não resolve. A combinação DESLOC+CORRESP resolve esse problema com elegância, permitindo pesquisas bidirecionais — linha e coluna dinamicamente calculadas — em qualquer direção da tabela. Neste artigo iremos mostrar como usar DESLOC com CORRESP no Excel para criar pesquisas avançadas que o PROCV simplesmente não consegue fazer.
Por que DESLOC+CORRESP supera o PROCV em muitos cenários
O PROCV tem três limitações estruturais que incomodam quem trabalha com tabelas complexas. Primeiro, a busca sempre precisa ser na primeira coluna do intervalo selecionado — se a chave de busca está na coluna B mas você quer retornar um valor da coluna A (à esquerda), o PROCV não consegue. Segundo, o argumento de posição da coluna de retorno é um número fixo — se você inserir ou remover colunas na tabela, o número muda e a fórmula retorna o valor errado sem avisar. Terceiro, para busca tanto por linha quanto por coluna simultaneamente, o PROCV exige estruturas aninhadas complicadas.
A combinação DESLOC+CORRESP elimina todas essas limitações. O CORRESP encontra a posição de um valor em um intervalo — tanto em linhas quanto em colunas — e o DESLOC usa essa posição para navegar até a célula correta. A busca pode ser em qualquer linha ou coluna, em qualquer direção, e o DESLOC retorna o valor da posição calculada. Se a estrutura da tabela muda e colunas são inseridas, o CORRESP recalcula a posição correta automaticamente — não há número de coluna fixo que precise ser ajustado manualmente.
Para um caso simples de substituição do PROCV — buscar um código de produto em uma tabela e retornar o nome correspondente, mesmo que o nome esteja à esquerda do código: se o código está na coluna B e o nome na coluna A, com o PROCV você não consegue buscar pelo código e retornar o nome. Com DESLOC+CORRESP: =DESLOC($A$1; CORRESP(E1; $B:$B; 0)-1; 0). O CORRESP encontra a posição da linha onde o código de E1 existe na coluna B. O DESLOC parte de A1 e desce essa quantidade de linhas menos 1 (para compensar que a linha 1 é o cabeçalho), sem deslocamento de coluna. O resultado é o nome do produto na coluna A, mesmo estando à esquerda da coluna de busca.
Pesquisa bidirecional: linha e coluna dinâmicas ao mesmo tempo
A pesquisa bidirecional — onde tanto a linha quanto a coluna do valor a retornar são calculadas dinamicamente — é onde DESLOC+CORRESP realmente não tem substituto direto além do par ÍNDICE+CORRESP. Para buscar um valor em uma tabela matricial onde você especifica tanto a linha quanto a coluna de pesquisa, a fórmula com DESLOC é: =DESLOC($A$1; CORRESP(linha_procurada; $A:$A; 0)-1; CORRESP(coluna_procurada; $1:$1; 0)-1).
Aqui, o primeiro CORRESP encontra a posição da linha procurada na coluna A (os cabeçalhos de linha da tabela) e o segundo CORRESP encontra a posição da coluna procurada na linha 1 (os cabeçalhos de coluna da tabela). O DESLOC parte de A1 e navega até a interseção dessas posições. Por exemplo, em uma tabela de vendas onde os vendedores estão nas linhas e os meses nas colunas: =DESLOC($A$1; CORRESP(“João”; $A:$A; 0)-1; CORRESP(“Março”; $1:$1; 0)-1) retorna as vendas do João em março, independentemente de em qual linha está João e em qual coluna está março.
Para tornar essa pesquisa bidirecional interativa em um dashboard, coloque o nome do vendedor em uma célula de controle (E1) e o nome do mês em outra (F1): =DESLOC($A$1; CORRESP(E1; $A:$A; 0)-1; CORRESP(F1; $1:$1; 0)-1). Agora, quando o usuário muda o vendedor ou o mês nas células de controle, a fórmula recalcula e retorna o valor correspondente na tabela. Combine com validações de dados nas células E1 e F1 para restringir as escolhas aos valores válidos (listas com os nomes dos vendedores e meses disponíveis), e você tem uma interface de consulta interativa à tabela sem nenhuma macro.
DESLOC+CORRESP para retornar intervalos inteiros
Uma vantagem do DESLOC sobre o ÍNDICE nesse tipo de pesquisa é a capacidade de retornar não apenas uma célula, mas um intervalo de células — usando os argumentos de altura e largura. Quando você quer buscar todos os dados de um vendedor específico (uma linha inteira da tabela) ou todos os dados de um mês específico (uma coluna inteira), o DESLOC+CORRESP faz isso em uma única fórmula.
Para retornar todos os meses de vendas do vendedor selecionado em E1: =DESLOC($A$1; CORRESP(E1; $A:$A; 0)-1; 1; 1; CONT.VALORES($1:$1)-1). Aqui, o deslocamento de linha usa o CORRESP para encontrar a linha do vendedor. O deslocamento de coluna é 1 (pula a coluna A dos nomes). A altura é 1 (apenas a linha daquele vendedor). A largura é calculada como o número de cabeçalhos de coluna menos 1 (excluindo a coluna de nomes), garantindo que todos os meses são incluídos independentemente de quantos meses existem na tabela. Essa fórmula alimenta diretamente um gráfico ou um SOMA para calcular o total anual do vendedor selecionado.
Para retornar todos os vendedores de um mês selecionado em F1: =DESLOC($A$1; 1; CORRESP(F1; $1:$1; 0)-1; CONT.VALORES($A:$A)-1; 1). O deslocamento de coluna usa o CORRESP para encontrar a coluna do mês. O deslocamento de linha é 1 (pula o cabeçalho). A altura é o número de vendedores (CONT.VALORES da coluna A menos 1 para o cabeçalho). A largura é 1 (apenas a coluna daquele mês). Essa fórmula retorna um intervalo vertical com todos os valores de vendas daquele mês, pronto para ser somado com SOMA(DESLOC(…)) ou passado como fonte de dados de um gráfico de comparação de desempenho entre vendedores em um mês específico.
Erros comuns ao usar DESLOC+CORRESP e como evitá-los
O erro mais comum ao usar DESLOC+CORRESP é o desalinhamento de 1 entre a posição retornada pelo CORRESP e o deslocamento esperado pelo DESLOC. O CORRESP retorna a posição relativa dentro do intervalo — o primeiro item é 1, o segundo é 2, e assim por diante. Mas o DESLOC conta o deslocamento a partir de 0 — deslocamento 0 fica na própria célula de partida, deslocamento 1 desce uma linha. Por isso, a fórmula sempre usa CORRESP(…)-1 para converter a posição para o deslocamento correto: se o CORRESP retorna 3 (o valor está na terceira posição), o deslocamento correto é 2 (desce 2 linhas da célula de partida para chegar à terceira linha de dados).
Outro erro frequente é incluir ou excluir o cabeçalho de forma inconsistente. Quando a referência de partida do DESLOC é a própria célula do cabeçalho (A1) e o CORRESP está buscando no intervalo que inclui o cabeçalho (A:A), o resultado é sempre -1 do esperado porque o CORRESP encontra o cabeçalho na posição 1 e o DESLOC com deslocamento 0 ficaria no cabeçalho. A solução mais simples é sempre partir do cabeçalho com DESLOC($A$1; …) e usar CORRESP com intervalo completo incluindo o cabeçalho e depois subtrair 1, como mostrado nos exemplos acima. Alternativamente, exclua o cabeçalho do intervalo do CORRESP ($A$2:$A$100 em vez de $A:$A) e não subtraia 1 — nesse caso, o deslocamento já é relativo aos dados, sem incluir o cabeçalho na contagem.
Se você curtiu esse artigo onde mostramos como usar DESLOC com CORRESP no Excel para pesquisa bidirecional em tabelas, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.