Предположим, вы получаете от поставщика/заказчика/клиента заполненную таблицу с перечнем продукции:
и эту таблицу необходимо сравнить с артикулами/кодами товара в имеющемся у вас каталоге продукции:
Как видно - в нашем каталоге только артикулы без наименований. У заказчика же помимо артикулов еще и название товара, т.е. много лишнего. И вам надо понять какие товары присутствуют в вашем каталоге, а какие нет:
Стандартных формул в Excel для подобного поиска и сравнения нет. Конечно, можно попробовать применить ВПР с подстановочными символами сначала к одной таблице, а затем к другой. Но если подобную операцию необходимо проделывать раз за разом, то прописывать по несколько формул к каждой таблице прямо скажем - не комильфо.
Поэтому я и решил сегодня продемонстрировать формулу, которая без всяких доп. манипуляций поможет такое сравнение сделать. Чтобы разобраться самостоятельно рекомендую скачать файл:
Tips_All_AnyoneOfArray.xls (49,5 КиБ, 28 719 скачиваний)
На листе "Заказ" в этом файле таблица, полученная от заказчика, а на листе "Каталог" наши артикулы.
Сама формула на примере файла будет выглядеть так:
=ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11;
эта формула вернет название артикула, если в тексте есть хоть один артикул из каталога и
Прежде чем облагородить эту формулу всякими дополнениями(вроде виде убирания ненужных
Кратко о принципе работы функция
Но у функции есть пара особенностей:
- Она ищет не обязательно именно точное совпадение с искомым, а максимально приближенное к нему. Если точнее - равное или большее искомому.
- Функция
ПРОСМОТР старается преобразовать непосредственно в массив любое выражение, записанное вторым аргументом.(LOOKUP)
Этими особенностями мы и будем пользоваться.
Как уже упомянул выше - в качестве диапазона для поиска значения обычно приводится массив ячеек, но т.к. функция
Само же выражение работает следующим образом:
По идее, после того, как функция
А в качестве искомого значения мы подсовываем функции
Вы можете просмотреть этапы вычисления функции самостоятельно для каждой ячейки, я здесь просто приведу этапы чуть в расширенном для понимания виде:
=ПРОСМОТР(2;1/ПОИСК(Каталог!$A$2:$A$11; A2 );Каталог!$A$2:$A$11)=ПРОСМОТР(2;
1/{55:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!};
Каталог!$A$2:$A$11)=ПРОСМОТР(2;{0,0181818181818182:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!:#ЗНАЧ!};Каталог!$A$2:$A$11) =ПРОСМОТР(2;
1;
{"FM2-3320":"CV455689":"Q5949X":"CE321A":"CE322A":"CE323A":"00064073":"CX292708":"CX292709":"CX292710"})="FM2-3320"
Теперь немного облагородим функцию и
Вместо артикулов и
работа функции проста - с
Т.е. все вместе получается: если наша основная функция возвращает значение ошибки
Вместо #Н/Д выведем
Про функция
Если вкратце, то функция проверяет выражение, записанное первым аргументом(наша основная функция). Если в итоге получаем любую ошибку, то ЕСЛИОШИБКА запишет значение из второго аргумента(в нашем случае это текст
Надо не просто определить какому артикулу соответствует, но и вывести цену для наименования по этому артикулу(сами цены должны быть расположены в столбце B листа Каталог):
- данные на листе с артикулами
не должны содержать пустых ячеек . Иначе с большой долей вероятности формула будет возвращать значение именно пустой ячейки, а не то, которое подходит под условия поиска - формула осуществляет поиск таким образом, что ищется любое совпадение. Например, в качестве артикула записана цифра 1, а в строке наименований может встречаться помимо целой 1 еще и 123, 651123, FG1412NM и т.п. Для всех этих наименований может быть подобран артикул 1, т.к. он содержится в каждом наименовании. Как правило это может произойти, если артикул 1 расположен в конце списка
Поэтому желательно
В приложенном в начале статьи примере вы найдете все разобранные варианты.
Если же вам понадобится выводить все наименования, то можно воспользоваться функцией СОДЕРЖИТ_ОДНО_ИЗ из моей надстройки MulTEx.
Так же см.:
Сравнение текста по части предложения
Что такое формула массива
Как найти значение в другой таблице или сила ВПР
ВПР с поиском по нескольким листам
Круто! Огромное спасибо!
Как же долго я это искал! Спасибо огромное! К сожалению не смог закинуть "Спасибо", выдает ошибку и на визу и на кошелек.
Просто бомба! ЕЩЕ РАЗ СПАСИБО!