Вот подход, который обращается к различным длинам номеров позиций и сокращенных кодов, а также к возможности того, что сокращенные коды различных длин имеют общие начальные цифры или буквы.
Он использует три вспомогательных столбца, которые точно соответствуют значениям VLOOKUPs
в сокращенном коде первых 3, 4 и 5 символов, соответственно, каждого элемента. Соответствие может быть найдено в любом, всех или (в случае неверных данных) ни в одном из этих поисков сокращенного кода.
Четвертый столбец расчета содержит формулы, которые выбирают среди результатов трех VLOOKUPs
.
Правила выбора просты. Если в списке сокращенных кодов найдено одно совпадение, соответствующий код возвращается. Если найдено два или три совпадения, возвращается совпадение с наибольшим количеством символов. Если для элемента не найдено совпадений, формулы возвращают значение ошибки # N/A.
Выражения выбора в четвертом столбце вычислений являются формулами массива и должны вводиться с помощью комбинации клавиш Control - Shift - Enter (т. Е. Формула в первой строке должна вводиться таким образом, а затем может быть скопирована вниз до список номеров товаров).
Для приведенных ниже примеров формул список полных номеров позиций находится в ячейках A2:A10
листа 1. Список сокращенных кодов находится в ячейках A2:A10
листа 2. Вспомогательные формулы находятся в столбцах B-D
листа 1, а формулы массива выбора - в столбце E
этого листа. (Пример формулы массива должен быть полностью виден при перемещении полосы прокрутки вправо.)
Формулы
Cell B2: =VLOOKUP(LEFT($A2,3),Sheet2!$A$2:$A$10,1,0)
Cell C2: =VLOOKUP(LEFT($A2,4),Sheet2!$A$2:$A$10,1,0)
Cell D2: =VLOOKUP(LEFT($A2,5),Sheet2!$A$2:$A$10,1,0)
Cell E2: =IFERROR(INDEX($B2:$D2,1,MAX(NOT(ISERROR($B2:$D2))*TRANSPOSE(ROW($1:$3)))),#N/A)
Я кратко объясню, как работает четвертая формула.
NOT(ISERROR($B2:$D2))
возвращает трехэлементный массив значений TRUE/FALSE, с TRUE для вспомогательных столбцов (в определенной строке), которые имеют совпадение, и FALSE в противном случае. Например, {TRUE, TRUE, FALSE}.
TRANSPOSE(ROW($1:$3))
просто предоставляет массив {1, 2, 3}, каждое число обозначает один из вспомогательных столбцов.
Их продукт - NOT(ISERROR($B2:$D2))*TRANSPOSE(ROW($1:$3)))
- создает массив со значениями 1, 2 или 3 для столбцов с совпадением и нулем в противном случае, как в {1, 2, 0}.
Функция MAX
возвращает наибольшее число в этом массиве, которое соответствует вспомогательному столбцу, который возвратил совпадение с наибольшим количеством символов. В массиве {1, 2, 0} MAX
возвращает 2 для совпадения в столбце C, 2-й из вспомогательных столбцов.
Затем INDEX
выбирает сокращенный код в столбце C.
Наконец, функция IFERROR
возвращает # N/A, если не найдено соответствующего сокращенного кода.
Лист1
Sheet2