(Respondendo aqui como nenhuma pergunta separada para dados classificados.)
Se os dados foram classificados, você pode usar VLOOKUPo range_lookupargumento TRUE(ou omitido, já que é o padrão), que é descrito oficialmente no Excel como "pesquisa por correspondência aproximada".
Em outras palavras, para dados classificados:
- definir o último argumento para
FALSEretornar o primeiro valor e
- definir o último argumento para
TRUEretornar o último valor.
Isso é em grande parte indocumentado e obscuro, mas data de VisiCalc (1979) e hoje é válido pelo menos no Microsoft Excel, LibreOffice Calc e Google Sheets. Em última análise, é devido à implementação inicial do LOOKUPVisiCalc (e daí VLOOKUPe HLOOKUP), quando não havia um quarto parâmetro. O valor é encontrado pela pesquisa binária , usando o limite esquerdo inclusivo e o limite direito exclusivo (uma implementação comum e elegante), o que resulta nesse comportamento.
Tecnicamente, isso significa que se inicia a pesquisa com o intervalo candidato [0, n), onde nestá o comprimento da matriz, e a condição invariante do loop é que A[imin] <= key && key < A[imax](o limite esquerdo é <= o destino, o limite direito, que inicia um após o final, é > a meta; para validar, verifique os valores nos pontos de extremidade antes ou verifique o resultado depois) e divida e escolha sucessivamente o lado que preservar esse invariante: por exclusão, um lado o fará, até que você atinja um intervalo com 1 termo [k, k+1), e o algoritmo então retorna k. Não precisa ser uma correspondência exata (!): É apenas a correspondência mais próxima abaixo. No caso de correspondências duplicadas, isso resulta em retornar a última correspondência, pois exige que o próximo valor seja maiordo que a chave (ou o final da matriz). No caso de duplicatas, você precisa de algum comportamento, e isso é razoável e fácil de implementar.
Esse comportamento é explicitamente explicado neste artigo antigo da Base de Dados de Conhecimento da Microsoft (ênfase adicionada): "XL: Como retornar a primeira ou a última correspondência em uma matriz" ( Q214069 ):
Você pode usar a função LOOKUP () para procurar um valor em uma matriz de dados classificados e retornar o valor correspondente contido nessa posição em outra matriz. Se o valor da pesquisa for repetido na matriz, ele retornará a última correspondência encontrada . Esse comportamento é verdadeiro para as funções VLOOKUP (), HLOOKUP () e LOOKUP ().
Segue documentação oficial para algumas planilhas; em nenhum dos casos o comportamento de "última correspondência" é declarado, mas está implícito na documentação do Planilhas Google:
Microsoft Excel
TRUE assume que a primeira coluna da tabela está classificada numericamente ou alfabeticamente e, em seguida, procurará o valor mais próximo .
Planilhas Google :
Se is_sortedfor TRUEou omitido, a correspondência mais próxima ( menor ou igual à chave de pesquisa) será retornada