INDEX + MATCH função retornando valores errados

3

Eu tenho uma planilha no Excel 2013 que usa uma função INDEX e MATCH para pesquisar por um intervalo de tempo (em I4 ) para extrair valores da linha correspondente onde é correspondida (na coluna A ). Ele funciona como esperado em todas as linhas, exceto três - nessas linhas de problema, ele retorna o valor da célula acima.

Estou usando o código:

=INDEX(B:B, (MATCH($I$4, A:A)))

O valor que eu uso para pesquisar o tempo de intervalo está localizado na célula I4 (por exemplo, 10:00 AM) e a coluna com a qual ele corresponde é A:A . Os valores que estou tentando retornar estão localizados em B:B .

A coluna do intervalo de tempo varia de A2 - A37 (6:00 - 11:30 PM, em incrementos de meia hora) e os valores que eu desejo retornados variam de B2 - B37 .

TODOS OS VALORES retornam corretamente, exceto ao pesquisar valores em A4 , A7 e A10 (7:00, 8:30 e 10:00 AM, respectivamente), que exibem dados do célula acima do valor desejado (ou seja, quando I4 = 7:00 AM (que é igual a A4 ), a fórmula retorna o valor de B3 em vez de B4 , I4 = 8:30 AM ( A7 ) → B6 em vez de B7 e I4 = 10:00 AM ( A10 ) → B9 em vez de B10 ).

Quando tento usar uma correspondência exata:

=INDEX(B:B, (MATCH($I$4, A:A, 0)))

retorna o valor # N / A para as linhas problemáticas e corrige os valores apenas para algumas das outras.

Alguma ideia do que está acontecendo?

    
por JarrBett 21.08.2015 / 21:48

1 resposta

3

Acredito que @ fixer1234 está correto - é um erro de arredondamento de ponto flutuante nos valores de hora . Eu não entendo completamente o que está acontecendo, mas consegui reproduzi-lo no meu sistema e encontrei uma solução alternativa: Mude sua fórmula para

=INDEX(B:B, MATCH($I$4+TIME(0,0,1), A:A))

Isso adiciona um segundo ( TIME(0,0,1) ; os argumentos são TIME(hours,minutes,seconds) ) para o valor I4 ; que parece ser o suficiente para obtê-lo "sobre a corcunda", para que ele teste como sendo ≥ o valor em A4 (ou A7 ou A10 ). BTW, eu tentei TIME(0,0,0.9) , mas aparentemente TIME() não honrará frações de segundo, e então isso apenas trata isso como TIME(0,0,0) ; ou seja, apenas zero. Se você quiser obter um milissegundo, você pode usar TIME(0,0,1)*0.001 .

P.S. Você tinha um par de parênteses desnecessários em sua fórmula; Eu removi, acima.

    
por 21.08.2015 / 22:38