[Funções] PROC: Fazendo um “PROCV” invertido, buscando de baixo para cima!

Talvez o PROCV seja das funções mais conhecidas e pesquisadas do Excel. Ela é muito útil para buscar informações em tabelas entre tabelas distintas. O PROCV irá buscar um valor na primeira coluna da esquerda de uma tabela e irá retornar um valor na mesma linha de acordo com um número de colunas especificado. Quem conhece a função PROCV sabe que ela irá trazer o valor referente a primeira linha localizada, começando de cima para baixo da tabela. Mesmo que existam outros valores iguais na primeira coluna, o resultado do PROCV será referente a linha do primeiro valor localizado. Veja a imagem:

Excelmaníacos - Procv Invertido 1

Veja que a aplicação da função PROCV na imagem trouxe como resultado a cor “Roxo”, sendo que existem duas correspondências para o nome “Rafael”. Conforme explicado, o PROCV traz o valor da primeira linha localizada.

Como fazer então para buscar o valor da última linha encontrada?

Vou mostrar uma técnica simples para trazer o última valor. Apesar deste artigo estar nomeado como “PROCV invertido”, a função que vamos utilizar não é o PROCV, mas uma função “irmã” chamada PROC.

A fórmula para trazer o valor da última linha é:

=PROC(2;1/(Intervalo de busca = valor procurado);Intervalo com valor de resposta desejado)

No Exemplo da imagem, a fórmula para trazer o último valor seria:

=PROC(2;1/(B5:B16=G6);D5:D16)

Veja a imagem:

Excelmaníacos - Procv Invertido 2

Veja que esta estrutura de fórmula funciona para tabelas na horizontal também, fazendo o papel equivalente ao PROCH para trazer o último valor localizado:

Excelmaníacos - Procv Invertido 3

Explicando a lógica desta fórmula, primeiro é preciso entender o que é a função PROC. A explicação dela no próprio Excel é “Procura um valor de linha ou coluna ou de uma matriz“com a sintaxe definida como PROC(valor_Procurado, Vetor_de_Procura, Vetor_de_Resultado).

Como a função aceita uma matriz no seu segundo argumento, podemos trabalhar com um teste lógico, que gera como resultado VERDADEIRO ou FALSO. Ao dividir 1 por estes elementos temos como resposta ou 1 (quando 1/VERDADEIRO) ou #DIV/0 (quando 1/FALSO), assim a matriz de busca vai ser sempre algo como:

{1;#DIV/0;1;1;#DIV/0;#DIV/0;1…}

A fórmula no exemplo fica:

=PROC(2;{1;#DIV/0;#DIV/0;#DIV/0;#DIV/0;#DIV/0;1;#DIV/0;#DIV/0;#DIV/0;#DIV/0;#DIV/0;};{Roxo;Rosa;Vermelho;Laranja;Amarelo;Preto;Branco;Cinza;Verde;Salmão;Bege;Marrom})

E por fim, um comportamento desejado da função. Ela vai procurar o número 2 na matriz que só vai conter 1 ou #DIV/0, e não encontrando ela vai retornar o último elemento que mais se aproxima de 2, ou seja, o último 1 da matriz, que vai trazer como resposta o elemento equivalente da matriz de resultado, que no exemplo é o “BRANCO”.

Em algum próximo post vou explicar como trazer um elemento de acordo com a ordem desejada, por exemplo, trazer a cor referente a 4ª ocorrência do nome “Rafael” na tabela. Aguardem!!

32 comentários em “[Funções] PROC: Fazendo um “PROCV” invertido, buscando de baixo para cima!

    1. Olá Giovani! Obrigado por visitar meu blog e comentar o artigo.
      Com relação a sua observação, não é correto dizer que o 3 no último argumento do PROCV irá trazer a última correspondência.
      O último argumento do PROCV exige um elemento booleano, que nada mais é do que o VERDADEIRO ou FALSO, ou 1 e 0 respectivamente. O que ocorre nestes tipos de argumento é que qualquer número diferente de 0, é interpretado como VERDADEIRO. Aqui caberia a discussão se seria correto a Microsoft manter essa lógica ou não, mas não vem ao caso agora.
      Assim, o 3 é interpretado como argumento VERDADEIRO no último argumento que define o tipo de busca, se exata ou aproximada. Assim, o que ocorre é que o PROCV retornará o 2º resultado da busca, que não necessariamente será o último, portanto não é correto dizer que colocando o 3 no último argumento do PROCV, vai fazer com que a função faça a busca de baixo para cima retornando o último resultado. Faça o teste com 3 códigos na coluna de busca para entender melhor este cenário.
      Abraços!

      Curtir

      1. Seria legal se a Microsoft adicionasse mais um argumento (optcional) na fórmula, permitindo que o usuário escolhesse a ordem ou a posição do resultado (primeiro, último ou o 3º … etc)

        Evitaria uma série de fórmulas precisamos desenvolver só para uma coisa que praticamente já existe.

        Abçs!

        Curtir

    1. No Google Docs funciona, só precisa segurar o Shift+Ctrl quando for apertar o Enter.

      Outra forma é colocar ArrayFormula no início, assim: =ArrayFormula(Proc(2;1/(B5:B16=G6);D5:D16))

      Curtir

      1. Mesmo fazendo isso, minha fórmula não funcionou. (Observação: estou usando dados de procura pela fórmula “importrange”), será que é por isso?

        Curtir

  1. rafaelissamu, funciona quando se busca uma coluna inteira (A:A e B:B)? Tentei aqui em casa e deu o erro #NÚM! Saberia me dizer por quê? Obrigado!

    Curtir

  2. muito bom!!!!… mas e se eu quiser que a fórmula ignore valores =0?… pois se não tiver valor algum na célula, retorna o valor de zero… quero que retorne o último valor diferente de zero.

    Curtir

  3. Ótima dica.
    Gostaria de fazer uma observação, modificar o padrão de fontes do site, pois o número 1 parece muito com a letra I, o que pode gerar uma certa confusão ao ler.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Gravatar
Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s