
Eu tenho duas colunas A
e B
. Column B
tem valores que preciso procurar em Column A
. No entanto, não preciso encontrar o valor correspondente exato, preciso do próximo valor mais alto.
Por exemplo:
Column A Column B
2 3
4 4
5 5
7 6
8 8
9 9
Então, para o valor 5
em column B
, quero retornar 7
de column A
.
Acho que provavelmente preciso de alguma forma de função de pesquisa/correspondência de índice, mas não consegui escrever a fórmula sozinho.
Responder1
Classificado
A fórmula mais simples é para o caso em que a coluna A
é classificada em ordem crescente:
Insira a seguinte fórmula C1
e pressione Ctrl-enter/copiar-colar/preencher/preencher automaticamente no restante da coluna da tabela:
=INDEX(A:A,1+MATCH(B1,A:A,1))
Explicação:
O 1
terceiro argumento MATCH()
significa que encontra o maior valor menor ou igual ao primeiro argumento. Adicionar 1
a esse índice resulta no índice do próximo número mais alto. A INDEX()
função então extrai o número.
Observe que adicionei um valor extra no final da coluna A
. Isto é para o caso especial em que não há valor imediatamente superior.
não triados
Para o caso em que a coluna A
não está classificada (também funciona se estiver classificada), a fórmula é um pouco mais complicada:
Array insira ( Ctrl+ Shift+ Enter) a seguinte fórmula C1
e copie e cole/preencha no restante da coluna da tabela (não se esqueça de remover o {
and }
):
{=SMALL(IF($A$1:$A$6>B1,$A$1:$A$6),1)}
Explicação:
A função retorna o enésimo menor valor do array,SMALL(array,n)
ignorando valores booleanos. Como o padrão para o terceiro argumento da IF()
função é FALSE
, apenas valores maiores que o valor na coluna B
são verificados, resultando no próximo valor mais alto.
Observe que um valor final especial para column A
não é necessário, pois #NUM!
ocorrerá um erro se não houver valores em column A
maiores que o valor em column B
.
Finalmente, como salientou aventurina, existe uma fórmula alternativa e semelhante que funciona independentemente da classificação (mas com uma ressalva importante).
Para Excel 2016+:
=MINIFS($A$1:$A$6,$A$1:$A$6,">"&B1)
Isso funciona porque a MINIFS()
função filtra os valores que não correspondem aos critérios antes de extrair o valor mínimo.
Para versões anteriores do Excel:
{=MIN(IF($A$1:$A$6>B1,$A$1:$A$6))}
Isso funciona pelo mesmo motivo que a SMALL()
função - ignora os valores booleanos gerados pela IF()
função.
Embargo:
Ambas as fórmulas =MINIFS()
e {=MIN(IF())}
não funcionarão corretamente se um zero puder ser o próximo valor mais alto correto, pois zero também é retornado quando háénenhum próximo valor mais alto. (Este é o mesmo motivo para adicionar um valor extra no final da coluna A
para a primeira fórmula - essa fórmula também retorna zero se não houver valores mais altos.)
Responder2
Você pode usar, por exemplo, a função array {=MIN(IF(A1:A6 > B1; A1:A6))}
ou {=MIN(IF(A1:A6 > B1; A1:A6; 1000))}
(com 1000 como valor substituto).
Ele pega o mínimo de todos os valores da coluna A que são maiores que o valor da célula atual da coluna B (aqui B1
). Portanto, nenhuma das colunas deve ser classificada.
Com Excel >= 2016 você também pode usar a MINIFS
função.
Observe que as funções de array devem ser inseridas pressionando Ctrl+Shift+Enter
.