[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!!

31 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 uma resposta para César Henrique Xavier Rosa Cancelar resposta

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

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