VBA: vlookup через несколько столбцов - PullRequest
1 голос
/ 04 июня 2019

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

В моем файле Excel есть две таблицы: Лист1 с одним столбцом «А» с 16868 идентификаторами различных процессов. Лист 2 со столбцами от «A» до «HX», где «A: HW» - это разные идентификаторы процессов (каждый столбец имеет разное количество строк), а в столбце «HX» - область для конкретной строки процессов.

Я пытаюсь добиться vloop для столбца листа A «A», который будет искать каждую запись в таблице sheet2 и возвращать «HX», когда найдет ее.

В примере: Я ищу ячейку "A2" в sheet1 в table_array sheet2 "A: HX". Если он найден, верните ячейку в той же строке, но из столбца «HX». Хитрость здесь в том, что когда искомое значение не находится в столбце sheet2 «A», тогда оно должно быть vlookup в столбце «B», затем «C» и так далее до «HW». Есть вариант, когда искомое значение может вообще не быть в sheet2, и тогда формула должна вернуть «0». Можно ли сделать это в формуле VBA или Excel?

1 Ответ

0 голосов
/ 04 июня 2019

Во-первых, пожалуйста, НИКОГДА не используйте VLOOKUP.Всегда.

Комбинация INDEX/MATCH всегда лучше во всех отношениях.Это быстрее, гибче и надежнее, так как не ломается при вставке столбцов.Это также (возможно) проще в использовании, поскольку вам не нужно считать столбцы.

В любом случае, вернемся к рассматриваемой проблеме.Для этого вы можете использовать комбинацию INDEX/SUMPRODUCT:

enter image description here

=INDEX(<range of return values>),SUMPRODUCT(--MAX((<range to search in>=<value to search for>)*ROW(<range to search in>)))-(ROW(<range to search in>)-1))

SUMPRODUCT возвращает номер последней строки, в которой найдено значение.

Последний бит -(ROW(<range to search in>)-1) предназначен только для того, чтобы сделать возвращаемое значение относительно искомого диапазона (а не абсолютного номера строки.

. Затем INDEX использует это значение для выбора значения изстолбец HX.

...