В этом ответе используется Array Formulas
, который необходимо ввести с помощью CTRL
+ SHIFT
+ ENTER
. Это довольно сложно, поэтому я сделаю все возможное, чтобы объяснить, и пересмотрю, если необходимо. Вот скриншот: ![Screenshot](https://i.stack.imgur.com/zSKOT.png)
Вот формула в необработанном виде; имена вводятся в столбце A, Times в столбце B.
=INDEX(B1:B7,MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),"")))
Как вы можете подозревать, он использует INDEX/MATCH
для выполнения работы, но ключ использует оператор IF
для генерации как критериев поиска, так и массива, в котором выполняет поиск функция MATCH
. Давайте разберемся с этим.
Sec 1, Массив поиска совпадений
IF(A1:A7=D2,ABS(E2-B1:B7),"")
Это создает массив поиска для функции соответствия. Если имя в D2
(наши критерии) совпадает с именем в массиве поиска, оно возвращает абсолютное значение разницы между временем критериев и временем в массиве, который мы ищем. В противном случае он возвращает пустое значение. Не используйте 0 для этого, так как это приведет к искажению результата матча.
Sec 2, Критерии поиска совпадений
MIN(IF(A1:A7=D2,ABS(E2-B1:B7),""))
Это говорит нам о наименьшем значении в приведенном выше массиве. Мы используем это значение в качестве критерия поиска в функции MATCH.
Раздел 3, соединение 1 и 2 вместе
MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),""))
При этом выполняется поиск наименьшей разности абс, определенной в разделе 2 в пределах массива, созданного в разделе 1, и возвращается номер строки.
Сек. 4, Индексирование времени
=INDEX(B1:B7,MATCH(MIN(IF(A1:A7=D2,ABS(E2-B1:B7),"")),IF(A1:A7=D2,ABS(E2-B1:B7),"")))
Это возвращает значение времени из столбца B в любой строке, идентифицированной функцией соответствия выше.
Надеюсь, все это имеет смысл. Не забудьте ввести его как формулу массива.