Como usar o vlookup para retornar o último valor de uma tabela?

Como usar o vlookup para retornar o último valor de uma tabela?

Por exemplo, minha tabela que chamarei de Tabela1 (defini isso como um nome) é adicionada à medida que novos dados chegam. Como posso usar o vlookup para recuperar o valor da segunda coluna do (último) ponto de dados final na parte inferior da Tabela1?

Responder1

A primeira coluna é numérica ou de texto? Você pode usar a opção de pesquisa de intervalo e procurar um valor que seja maior que qualquer valor em sua tabela. Se sua primeira coluna contiver palavras, tente:

=VLOOKUP("ZZZZZ", Table1, 2, TRUE)

ou, se sua primeira coluna for um número de cinco dígitos, tente:

=VLOOKUP("99999", Table1, 2, TRUE)

E me ocorreu que isso também funcionará, mas é mais lento. Defina a primeira coluna da Tabela1 como Tabela1Col1.

=VLOOKUP(MAX(Table1Col1), Table1, 2, TRUE)

Responder2

Se você deseja atualizar dinamicamente a coluna que está selecionando, você pode usar uma fórmula MATCH() para preencher o valor col_index_num. Por exemplo:

=VLOOKUP("d", Table1, 2, FALSE)

retornará o valor na segunda coluna. enquanto:

=VLOOKUP("d",Table1[#All],MATCH("value2",Table1[#Headers],0),FALSE)

retornará o valor na coluna cujo cabeçalho é valor2. Ainda mais dinamicamente, você pode escrever assim:

=VLOOKUP("d", Table1, MATCH(Table1[[#Headers],[value2]],Table1[#Headers],0), FALSE)

que será atualizado automaticamente se você renomear os cabeçalhos das colunas da tabela

Responder3

=VLOOKUP(A2,Table1,2,MAX(Table1Col2))

Explicação: =VLOOKUP(**Data being looked up**,**Name of Table or data range**,**column of data being looked up**,MAX(**Name or data range of data being looked up**))

Ele trará de volta o último valor das linhas que correspondem ao lookup_value

Responder4

Respondendo principalmente para dar uma resposta moderna aos pesquisadores atuais ("moderno" = 2021).

Você usaria XLOOKUP(). Não é um substituto perfeito e não é adequado para algumas situações. Mas este é simples e sua versão beta foi redesenhada para ser executada.

A característica interessante é que ele possui um parâmetro para pesquisar do final para o início, então... enterrada.

Lendo as respostas, percebi que não há uma resposta definitiva para a pergunta em termos que teriam funcionado quando postados. A resposta do meio nem sequer aborda a questão e a terceira é mentirosa ao enésimo grau. Ele usa algo sofisticado para gerar o valor booleano TRUEquando apenas digitar TRUE(ou 0para eles o que preferir) faria exatamente a mesma coisa. Quase dá a impressão de que o respondente esperava que algo sofisticado, algo pretensioso, assumisse a aparência de valor. Caramba. E NÃO NÃO NÃO está certo porque, embora POSSA dar uma resposta não incorreta, é apenas por acaso. Chance decente, já que o principal modo de falha será quando o valor desejado for o último item do intervalo, mas como isso pode ser baseado especialmente na data, isso tem uma chance bastante razoável de acontecer.

A primeira resposta fornece algumas coisas práticas para tentar e, dependendo dos seus dados, uma delas, ou algo inspirado nelas, pode funcionar bem para você. Não como o terceiro, que é bastante inspirado em vigaristas e daria a alguns um forte senso de confiança nos resultados, deixando-os boquiabertos quando o chefe chega gritando sobre um fracasso.

No entanto, são apenas coisas práticas e não necessariamente soluções. Existe uma abordagem padrão para isso, disponível "em qualquer lugar" na Internet, que é usada LOOKUP()de maneira inteligente. Mas que tal algo muito mais direto e mais fácil de entender? (Para a maioria, o LOOKUP()método, embora inteligente, muito inteligente e, na verdade, muito simples, é simplesmente desconcertante, perdendo-os no estágio de primeira olhada, de modo que, embora possam compreendê-lo FACILMENTE, nunca chegam a esse ponto para perceber isso.)

A INDEX()função pode ser usada para virar uma mesa de cabeça para baixo, por assim dizer, de modo que a primeira linha apresentada ao restante da fórmula seja a última linha do intervalo original ("físico"). Isso é feito especificando, para o parâmetro row, algo que gera uma sequência de números começando com o maior número de linha (maior "índice") e caindo para 1.

Isso foi feito em 2012/2013 usando um truque inteligente para gerar os números das linhas em uma sequência: ROW(1:100)fornece uma sequência de 1, 2, 3, ... 98, 99, 100. Para reverter você pensaria que poderia simplesmente usar ROW(100:1)mas O Excel "conserta" de forma útil o seu erro bobo que você está cometendo ROW(1:100)- quer você goste ou não. Não há como superar isso. Mas se você souber o número de linha mais alto usado e não for um problema, poderá adicionar 1 a ele, portanto, neste exemplo, 100 + 1, e depois subtrair a sequência fornecida pelo Excel. Como você tem 101 - 1, 100 - 2, 100 - 3, ... você obtém 100, 99, 98, ... até 101 - 100 ou 1.

Use isso para o parâmetro de linha, INDEX()então inverta as linhas da última para a primeira.

Para as colunas para INDEX(), você precisa pensar além da experiência usual com VLOOKUP(). Normalmente, você fornece uma tabela/intervalo que pode ter muitas colunas. Então talvez A2:W900. Você deseja pesquisar na coluna A e encontrar algo na coluna T (ou coluna 20). Então você pode ter algo parecido VLOOKUP("cow",A2:W900,20,false). Bem, INDEX()permite que você use um truque para especificar apenas certas colunas em vez de usar todas as colunas no intervalo fornecido: a constante da matriz.

Array Constantssão uma forma de fornecer, bem, uma matriz... de valores ao Excel. Eles se parecem com isto: {"a","cow",13,999,"fisherman","circu"}. So in this example, you want to have columns A and T, or 1 and 20, so you'd giveINDEX() {1,20}` para o terceiro parâmetro, o parâmetro da coluna.

O objetivo de tudo isso é INDEX()criar uma tabela virtual para usar na fórmula no lugar da tabela real. A tabela virtual não possui linhas 2-900 e colunas AW. Possui linhas 900 a 2 e apenas colunas A e T. Essa função ficaria assim no exemplo:

INDEX( A2:W900, 900-ROW(1:899), {1,20} )

(Lembre-se, você está usando as linhas 2 a 900, então você tem apenas 899 linhas, não 900. Portanto, a linha 2 do Excel é o "índice" 1 no intervalo e a linha 900 do Excel é o índice 899. 899 + 1 = 900, então você usa 900, não 901. Então os números na fórmula fazem "sentido". É como chamar o primeiro disco rígido de "Unidade 0" e não de "Unidade 1".

Agora você tem uma tabela virtual da coluna A e da coluna T SOMENTE, linha 900 primeiro, descendo para a linha 2 por último, e esta é a sua tabela para usar no arquivo VLOOKUP(). Portanto, a fórmula completa para procurar a palavra "vaca" e obter qualquer correspondência exata... começando no FIM e voltando ao início, ficaria assim:

=VLOOUP( "cow", INDEX( A2:W900, 900-ROW(1:899), {1,20} ), 2, false )

Como os dados da tabela "real" são as linhas 2 a 900, isso significa encontrar a ÚLTIMA correspondência usando uma tabela que reverteu os dados para as linhas 900 a 2. E ele usa apenas as duas colunas, aquela em que você faz a pesquisa IN e aquela em que você obtém os dados, não todas as 23 colunas de dados. Como existem apenas duas colunas, a coluna da qual retornar uma resposta é sempre EASY: é a coluna 2. "false" garante uma correspondência exata, se houver.

E isso SEMPRE funcionará.

Além disso, aquela constante de matriz que usamos, {1,20}... o que você acha que a reversão desses valores faria? Como em {20,1}. Eles invertem a ordem das colunas. Portanto, se você deseja usar VLOOKUP(), mas sua coluna de pesquisa neste exemplo é a coluna T e deseja resultados da coluna A, você não terá sorte. (O velho "acidente sem sorte" do meu tempo no programa de energia nuclear da Marinha dos EUA. Cara, acidente "OOL"... estávamos TÃO perto de criar "LOL" anos antes, mas... simplesmente... não fizemos t... Bem, acidentes em usinas de reatores não eram motivo de riso, suponho, então talvez seja melhor, hein?) Sua coluna de pesquisa DEVE estar à esquerda da coluna de resultados para usar VLOOKUP()... não, bom!

No entanto, como você cria uma tabela virtual que inverte as colunas, sua coluna de pesquisa fica repentinamente À ESQUERDA, afinal! BUENO!

Além disso, a constante da matriz para as colunas (ou linhas, mas geralmente colunas) pode usar apenas alguns números, usá-los em qualquer ordem, E usá-los mais de uma vez, se desejar.

Lembrando o "método moderno": hoje em dia podemos usar SEQUENCE()para gerar diretamente aquela sequência reversa de 899 até 1.

informação relacionada