Значение поиска в диапазоне вокруг заданного значения поиска

322
Jim Richalds

У меня есть 2 базы данных, с которыми я работаю в Excel. Это тесты скорости интернета, которые разделяют введенный пользователем адрес и фактический тест скорости на две базы данных. Таблица адресов и таблица скоростных тестов не имеют уникального идентификатора, связывающего их вместе (упс!), Но у них есть метки времени.

Я хотел бы использовать метки времени в качестве идентификатора. Как мне выполнить поиск, который проверяет значения меток времени, которые, например, происходят за 15 минут до или после значения поиска.

0

1 ответ на вопрос

0
Bandersnatch

Было бы полезно, если бы вы предоставили некоторые образцы данных. Я сделал предположение и изготовил некоторые данные, которые могут напоминать ваши, и, надеюсь, объяснение того, как работают формулы, позволит вам адаптировать их к вашей структуре данных.

Основная идея вашего вопроса - как найти времена в одном столбце, которые происходят в течение 15 минут, в другом столбце. Столбцы меток времени в приведенной ниже таблице фактически являются полными датами и временем, но отформатированы так, чтобы показывать только часы и минуты.

enter image description here

Формула массива в E3:

=IFERROR(INDEX(D$3:D$52,MATCH(1,(1*(24*60*ABS(B3-D$3:D$52)<=$H$3)),0)),"")

Это должно быть введено с CTRLShiftEnterи затем заполнено.

Вот как это работает: внутреннее выражение ABS(B3-D$3:D$52)создает массив абсолютных разностей между временем в B3 и временем в столбце D. Результатом является число, в котором десятичная часть представляет дробное число дней между двумя датами. Умножение на 24 * 60 преобразует это в минуты, и неравенство проверяет, являются ли эти значения <= количество минут в H3 (первоначально 15, но об этом позже).

В этот момент выражение (24*60*ABS(B3-D$3:D$52)<=$H$3)создает массив значений True / False, соответствующих тому, находится ли B3 в течение 15 минут от времени в столбце D. Умножение на 1 преобразует значения True / False в 1 и 0.

Теперь MATCH () находит позицию первой 1 в массиве, а INDEX () выдает соответствующее время из столбца D. Наконец, IFERROR () выдает пробел (вместо # N / A), если нет соответствующего времени в пределах + / - 15 минут было найдено.

Эта формула в F3: =IFERROR(INDEX(C$3:C$50,MATCH(E3,D$3:D$50,0)),"")просто ищет время столбца E в столбце D и возвращает соответствующую скорость из столбца C.

Наконец, эта формула в G3: =IF(SUMPRODUCT(1*(24*60*ABS(B3-D$3:D$52)<=$H$3))>1,"Yes","")проверяет наличие ошибок. Он суммирует массив из 1 и 0 во внутреннем выражении и выдает «Да», если ответ> 1. Это означает, что в столбце B было 2 или более раз в течение 15 минут после времени. Функция MATCH () будет только найти первый, который не может быть правильным. Обходной путь заключается в том, чтобы уменьшить значение в H3, пока «Да» не исчезнет из данной строки. В этот момент время в столбце E - это самое близкое время к столбцу B.

Я надеюсь, что вы нашли это полезным.

Заметки:

  1. Я сгенерировал случайное время для столбцов B и D, поэтому в столбце B есть несколько моментов, у которых нет времени совпадения (+/- 15 минут) в столбце D. Если у ваших данных нет несоответствий, вы можете удалить оболочки IFERROR.

  2. Предположительно ваша база данных растет, поэтому вы можете использовать в формулах ссылки на целые столбцы (например, D: D).

Похожие вопросы