Вы почти получили это. MATCH()
может искать значение только в одной строке или столбце. INDEX()
может извлечь значение из таблицы, и обычно вы используете MATCH(), чтобы указать номер строки и номер столбца, ища заголовок правой строки и столбца.
Ваша проблема немного сложна, потому что у вас нет заголовков строк, которые MATCH()
может использовать. Таким образом, вам нужно (сначала) получить соответствующий столбец, а затем сопоставить число в этом столбце.
Давайте построим формулу по частям, и будет легче увидеть, что происходит. INDEX(array,row_num,col_num)
вернет столбец, все, что вам нужно сделать, это пропустить row_num. Скажем, диаметр трубы, который вы ищете, указан в B25, как на скриншоте ниже. Тогда эта формула вернет соответствующий столбец таблицы данных:
INDEX(B2:J20,,MATCH(B25,B1:J1,0))
Вы можете проверить это, выделив формулу в строке формул и нажав F9. Это покажет вам список значений в столбце с заголовком B25.
Далее мы хотим найти дебет в этом столбце, поэтому мы используем столбец в формуле MATCH()
:
MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1)
Обратите внимание, что для этого внешнего MATCH()
мы используем match_type из 1 вместо 0. Match_type 0 вызывает точное совпадение, но match_type 1 возвращает ближайшее нижнее значение, если не может найти точное совпадение. И это именно то, что вы хотите.
Теперь единственная проблема состоит в том, что эта формула просто возвращает позицию найденного совпадения, а не фактическое значение. Но теперь мы знаем столбец и строку, поэтому мы можем заключить их в другой INDEX()
чтобы получить фактическое значение дебета:
=INDEX(B2:J20,MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1),MATCH(B25,B1:J1,0))
Здесь последний MATCH()
определяет col_num, а первый указывает row_num. Эта формула в E24 на картинке ниже. Он не нашел точного соответствия для дебета 1,7, поэтому он вернул следующее более низкое число 1,59.
Мы можем получить следующий более высокий дебет, просто добавив 1 к row_num:
=INDEX(B2:J20,MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1)+1,MATCH(B25,B1:J1,0))
И мы можем сделать так, чтобы он возвращал пробел, если было найдено точное совпадение:
=IF(F24<>"Match",INDEX(B2:J20,MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1)+1,MATCH(B25,B1:J1,0)),"")
Формулы в F24 и F25:
=IF(E24=C25,"Match","Next Lower")
=IF(E24=C25,"","Next Higher")
Надеюсь, это поможет. Удачи.
РЕДАКТИРОВАТЬ: чтобы вернуть соответствующие значения из столбца A, мы можем использовать OFFSET(). Смещение начинается с указанной ячейки (здесь мы будем использовать A1) и уменьшается на указанное количество строк. Для количества строк мы будем использовать то же выражение, которое мы использовали для получения позиции дебета: MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1)
Вся формула:
=OFFSET(A1,MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1),0)
И мы можем получить следующее более высокое значение, просто добавив 1 к числу строк, как и раньше:
=OFFSET(A1,MATCH(C25,INDEX(B2:J20,,MATCH(B25,B1:J1,0)),1)+1,0)