Как использовать Index/Match или другую функцию для получения данных ячейки слева от искомого значения

Как использовать Index/Match или другую функцию для получения данных ячейки слева от искомого значения

Я пытаюсь использовать комбинацию INDEXи , MATCHчтобы заставить работать следующее.

введите описание изображения здесь

Вы увидите на нижней стороне изображения значение "High". Я пытаюсь найти это значение в таблице слева. Затем я хочу, чтобы на выходе было имя "Floorplan". Так что по сути я хочу, чтобы "D" отображалось в J14.

Я изначально пытался, VLOOKUPно узнал, что первый столбец должен быть значением поиска, поэтому я пробую маршрут индекса/соответствия. Но я не могу заставить его работать. Любые отзывы были бы приветствуются.

Используемая формула:

=INDEX($A$9:$D$15,MATCH($I$14,A9:D15,4),1)

решение1

Как gns100уже было сказано, MATCH()не удалось, так как диапазон для сопоставления не был одним столбцом (или строкой). И using XLOOKUP()работает здесь хорошо, а также детали делают его непригодным, как это иногда бывает. Он следует тому же базовому подходу, что и INDEX/MATCHв том, что ему даны те же основы: искомое значение, где искать это значение, куда идти, чтобы найти то, что вернуть.

VLOOKUP()МОЖЕТ подойти, если по какой-то причине вы предпочитаете именно это. Я полагаю, INDEX/MATCHчто это работает в любой версии Excel, в которой есть VLOOKUP(), поэтому с небольшой корректировкой, gns100показанной ниже, вы всегда можете использовать его, когда требуется совместимость со старыми версиями.

VLOOKUP()делает это, используя INDEX()для создания виртуальной таблицы для своего второго параметра, которая содержит только столбец поиска и столбец результатов, и именно в таком порядке. Например:

=VLOOKUP($I$14,  INDEX(A9:D15, ROW(INDIRECT("1:"&ROWS(A9:D15)) ),{4,1}),  2,  FALSE)

(" Константа {4,1}массива") говорит, INDEX()что сначала нужно вернуть 4-й столбец, а затем 1-й столбец, что дает вам (виртуальную) двухстолбцовую таблицу поиска, в которой VLOOKUP()можно "посмотреть направо", чтобы найти результат. Так что он все еще "смотрит направо", но эффект в том, что он "смотрит налево".

Этот кусочек в середине ROW(INDIRECT("1:"&ROWS(A9:D15))— это просто старый школьный способ получения ряда от «1» до чего угодно, чтобы указать, что нужно вернуть все строки. В настоящее время SEQUENCE( ROWS(A1:D15) )подойдет простой вариант, но он не возвращается назад, XLOOKUP()так что... Причина, по которой он должен быть там, заключается в том, что когда вы указываете либо строки, либо столбцы (или «области» в некоторых других случаях), используя константу массива напрямую, или что-либо, что генерирует константу массива во время ее вычисления, то Excel требует, чтобы другой параметр был указан полностью, а не просто, скажем, ,,(ничего для параметра строки) или ,0,(«0» для параметра строки), любой из которых указывает «ВСЕ» строки для Excel.

Да, старая школа была отвратительна. Надо любить XLOOKUP()и FILTER()!

Вы можете использовать похожую технику со строками, хотя и составленными немного по-другому, чтобы создать INDEX()виртуальную таблицу снизу вверх, сверху вниз... последняя строка теперь первая, первая строка теперь последняя. Это может позволить вам найти "самую новую дату" и подобные вещи, в которых вы хотите искать снизу вверх.

Все они предназначены только для совместимости со старыми версиями, поскольку XLOOKUP()не могут делать то, что нужно в необычных обстоятельствах. И подобные подходы, которые делают то, что FILTER()делают сейчас, также, конечно, нужны только для совместимости со старыми версиями.

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

Связанный контент