
У меня есть два столбца, A
и B
. В столбце B
есть значения, которые мне нужно найти в столбце A
. Однако мне не нужно находить точное соответствующее значение, мне нужно следующее большее значение.
Например:
Column A Column B
2 3
4 4
5 5
7 6
8 8
9 9
Итак, для значения 5
в столбце B
я хочу вернуть 7
из столбца A
.
Думаю, мне, вероятно, понадобится какая-то функция поиска/сопоставления индексов, но я не смог написать формулу самостоятельно.
решение1
Сортировано
Самая простая формула применима к случаю, когда столбец A
отсортирован по возрастанию:
Введите следующую формулу C1
и нажмите ctrl-enter/copy-paste/fill-down/auto-fill в оставшуюся часть столбца таблицы:
=INDEX(A:A,1+MATCH(B1,A:A,1))
Объяснение:
Третий 1
аргумент MATCH()
означает, что он находит наибольшее значение, которое меньше или равно первому аргументу. Добавление 1
к этому индексу приводит к индексу следующего большего числа. INDEX()
Затем функция извлекает число.
Обратите внимание, что я добавил дополнительное значение в конце столбца A
. Это для особого случая, когда нет следующего более высокого значения.
Несортированный
Для случая, когда столбец A
не отсортирован (также работает, если отсортирован), формула немного сложнее:
Массив, введите ( Ctrl+ Shift+ Enter) следующую формулу C1
и скопируйте-вставьте/заполните оставшуюся часть столбца таблицы (не забудьте удалить и {
) }
:
{=SMALL(IF($A$1:$A$6>B1,$A$1:$A$6),1)}
Объяснение:
Функция возвращает n-ное наименьшее значение массива,SMALL(array,n)
игнорирование булевых значений. Поскольку значение по умолчанию для третьего аргумента функции IF()
равно , проверяются FALSE
только значения, превышающие значение в столбце , в результате чего получается следующее большее значение.B
Обратите внимание, что специальное конечное значение для столбца A
не требуется, так как #NUM!
результатом будет ошибка, если в столбце нет значений, A
больших значения в столбце B
.
Наконец, как указал Авантюрин, существует альтернативная, похожая формула, которая работает независимо от сортировки (но с важной оговоркой).
Для Excel 2016+:
=MINIFS($A$1:$A$6,$A$1:$A$6,">"&B1)
Это работает, поскольку MINIFS()
функция отфильтровывает значения, не соответствующие критериям, перед извлечением минимального значения.
Для более ранних версий Excel:
{=MIN(IF($A$1:$A$6>B1,$A$1:$A$6))}
Это работает по той же причине, что и SMALL()
функция — она игнорирует логические значения, генерируемые функцией IF()
.
Предостережение:
Обе формулы =MINIFS()
и {=MIN(IF())}
не будут работать правильно, если ноль может быть правильным следующим более высоким значением, поскольку ноль также возвращается, когда нетявляетсянет следующего более высокого значения. (Это та же причина, по которой добавляется дополнительное значение в конце столбца A
для первой формулы — эта формула также возвращает ноль, если нет более высоких значений.)
решение2
Например, можно использовать функцию массива {=MIN(IF(A1:A6 > B1; A1:A6))}
или {=MIN(IF(A1:A6 > B1; A1:A6; 1000))}
(с 1000 в качестве резервного значения).
Он берет минимум из всех значений из столбца A, которые больше значения из текущей ячейки из столбца B (здесь B1
). Поэтому ни один из столбцов не должен быть отсортирован.
В Excel >= 2016 вы также можете использовать эту MINIFS
функцию.
Обратите внимание, что функции массива необходимо вставлять нажатием Ctrl+Shift+Enter
.