4

У меня есть электронная таблица в Excel 2013, которая использует функции INDEX и MATCH для поиска по интервалу времени (в I4), чтобы извлечь значения из соответствующей строки, в которой она сопоставляется (в столбце A). Он работает, как и ожидалось, во всех строках, кроме трех - в тех проблемных строках он фактически возвращает значение из ячейки выше.

Я использую код:

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

Значение, которое я использую для поиска интервала времени, находится в ячейке I4 (например, 10:00 утра), и столбец, которому сопоставляется это A:A Значения, которые я пытаюсь вернуть, находятся в B:B

Столбец интервала времени находится в диапазоне от A2 A37 (с 6:00 до 23:30 с шагом в полчаса), а значения, которые я хочу вернуть, находятся в диапазоне от B2 B37 .

ВСЕ ЗНАЧЕНИЯ возвращаются правильно, кроме случаев поиска значений в A4 , A7 и A10 (7:00 AM, 8:30 AM и 10:00 AM, соответственно), которые отображают данные из ячейки выше желаемого значения (то есть, когда I4 = 7:00 AM (что соответствует A4), формула возвращает значение B3 вместо B4 , I4 = 8:30 AM (A7) → B6 вместо B7 и I4 = 10:00 AM (A10) → B9 вместо B10).

Когда я пытаюсь использовать точное совпадение:

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

он возвращает значение # N/A для проблемных строк и корректные значения только для некоторых других.

Любое понимание того, что происходит?

1 ответ1

4

Я считаю, что @ fixer1234 правильно - это ошибка округления с плавающей запятой по значениям времени.  Я не до конца понимаю, что происходит, но я смог воспроизвести это в своей системе и нашел обходной путь: измените формулу на

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

Это добавляет одну секунду (TIME(0,0,1) ; аргументы - TIME(hours,minutes,seconds)) к значению I4 ; этого, по-видимому, достаточно, чтобы получить его "за горбом", чтобы он тестировался как ≥ значения в A4 (или A7 или A10).  Кстати, я пробовал TIME(0,0,0.9) , но, видимо, TIME() не учитывает доли секунды, и поэтому он просто обрабатывает это как TIME(0,0,0) ; т. е. просто ноль.  Если вы хотите получить миллисекунду, вы можете использовать TIME(0,0,1)*0.001 .

PS У вас была ненужная пара скобок в вашей формуле; Я удалил это, выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .