как vlookup, если префикс найден в списке? - PullRequest
1 голос
/ 11 марта 2020

enter image description here

HI. Как я могу найти возвращаемое значение «название компании» (столбец H) в столбце B, если какой-либо из «PrefiX» (столбец G) найден в «con no» (столбец A).

Пример результат необходим, как в столбце B.

Образец: 6200 11113 = DD CN 1234 = BB

спасибо

Ответы [ 2 ]

1 голос
/ 11 марта 2020
=INDEX($H:$H,AGGREGATE(15,6,ROW($G$1:$G$7)/(--(FIND($G$1:$G$7,$A2)=1)*--(LEN($G$1:$G$7)>0)),1),1)

При разборе этого значения INDEX получает элемент N th из столбца H (название компании). Чтобы найти значение N , мы используем AGGREGATE функция

AGGREGATE - странная функция - она ​​позволяет нам используйте такие вещи, как MAX или LARGE или SUM, игнорируя любые значения ошибок. В этом случае мы будем использовать его для SMALL (первый аргумент, 15), игнорируя значения ошибок (второй аргумент, 6). Нам понадобится очень наименьшее значение, поэтому четвертый аргумент будет 1. (Если бы мы хотели второе наименьшее, это было бы 2 и т. Д.)

=INDEX($H:$H,AGGREGATE(15,6, <SOMETHING> ,1),1)

Итак, все, что нам сейчас нужно, это список значений для сравнения! Чтобы упростить задачу немного , я выделю вам этот фрагмент кода здесь:

ROW($G$1:$G$7) / (--(FIND($G$1:$G$7,$A2)=1) * --(LEN($G$1:$G$7)>0))

Здесь есть 3 части. Первое, ROW($G$1:$G$7) - это фактическое значение, которое мы хотим получить - это будут номера строк для каждого префикса, соответствующего вашему значению. Однако сам по себе это будет все номеров строк. Поскольку мы пропускаем ошибки, мы хотим, чтобы любые строки, которые не соответствовали префиксу, выдавали ошибку. Самый простой способ сделать это - разделить на ноль

В начале --(FIND($G$1:$G$7,$A2)=1) и --(LEN($G$1:$G$7)>0) мы имеем двойной отрицательный результат. Это быстрый способ конвертировать True и False в 1 и 0. Только когда оба теста равны True, мы не разделим на 0, как показано в этой таблице:

A | B | A*B
1 | 1 |  1
1 | 0 |  0
0 | 1 |  0
0 | 0 |  0

Начиная сначала со второго теста (это проще), мы имеем LEN($G$1:$G$7)>0 - в основном "не смотрите на пустые ячейки".

Другой тест (FIND($G$1:$G$7,$A2)=1) будет искать префикс в Con No и возвращать, где он найден (или * 1061). * ошибка, если не ). Затем мы проверяем «это в позиции 1» - другими словами, «Это в начале« Кон номер », а не в середине». Мы не хотим говорить, что Con No CNQ6060 является частью Company AA вместо Company BB по ошибке!

Итак, если префикс находится в начале номера Con, И он не пустой (потому что существует бесконечное количество ничего до, после и между каждым числом и буквой), тогда мы добавляем его в наш список строк. Затем мы берем наименьшую строку (т. Е. Ближайшую к верху - изменим AGGREGATE(15 на AGGREGATE(14, если вы хотите ближайшую к нижней части!) И используем ее для получения названия компании

0 голосов
/ 11 марта 2020

Вы можете попробовать следующее формальное:

=VLOOKUP(IF(LEFT(A3,1)="6",LEFT(A3,4),IF(LEFT(A3,1)="C",LEFT(A3,2),IF(LEFT(A3,1)="E",LEFT(A3,7)))),$G$3:$H$7,2,0)

Имейте в виду, что вы должны использовать ' перед значением ячейки столбца A & G, чтобы преобразовать ячейку значение в текст, чтобы получить правильное значение, полученное с помощью VLOOKUP

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...