Страницы: 1
RSS
Поиск значения по нескольким критериям при отсутствии отдельных критериев, Как подтянуть значения по нескольким критериям, при этом некоторые критерии могут отсутствовать?
 
Просьба помочь с формулой, которая позволит корректно подтянуть данные. Далее опишу проблему на условном (может быть не очень логичном примере).

Менеджеры заполняют базу данных по продажам, указывая место продажи, категорию и наименование товара. Есть прайс-лист, в котором указаны цены на товар в зависимости от места продажа, категории и наименования товара. Нужно подтянуть цены из прайс-листа.  

! Однако в самом прайс-листе могут быть не указаны отдельные аналитики. Например, если в базе данных указано отсутствующее в прайс-листе место продажи, то цена должна подтянуться по другим имеющимся критериям. Если ни один критерий не найден, тогда - Н/Д.

Прилагаю файл с примером.
 
Код
=ИНДЕКС(Таблица1[Цена];ПОИСКПОЗ(1;(([@Магазин]=Таблица1[Магазин])+(""=Таблица1[Магазин]))*([@Категория]=Таблица1[Категория])*(([@Товар]=Таблица1[Товар])+(""=Таблица1[Товар]));0))
Алексей М.
 
Гениально!!! Огромное спасибо за помощь!
 
Цитата
написал:
Код=ИНДЕКС(Таблица1[Цена];ПОИСКПОЗ(1;(([@Магазин]=Таблица1[Магазин])+(""=Таблица1[Магазин]))*([@Категория]=Таблица1[Категория])*(([@Товар]=Таблица1[Товар])+(""=Таблица1[Товар]));0))
Формула действительно классная. Однако некорректно подтягивает цену, когда по одной аналитике в прайсе одновременно имеются и значения, и пустые ячейки. Привожу пример.
Есть ли какое-то решение данной проблемы?
 
Сегодня у ПК быть не смогу. Завтра попробую разобраться.
Как вариант в ПОИСКПОЗ() искать без учета ""=...., а при ошибке искать пустотах.
Алексей М.
 
Возможно это рабочий вариант, но пока не понимаю, как его упростить. В примере указал простой случай, когда отсутствует одна аналитика - наименование товара. А задача сделать так, чтобы в прайсе можно было убирать любые аналитики. Т.е. может быть их несколько сочетаний с учетом пустом. Причем в моём реальном кейсе таких аналитик значительно больше, чем в примере. Соответственно сочетаний с отсутствующими аналитиками будет ну очень много...

Проблема по сути даже сложнее, чем я первоначально описал, т.к. необходимо учесть иерархию аналитик или последовательность их применения. Дополнил пример:
1) Так, например, если в базу данных заносится категория и наименование товара, которое отсутствует в прайсе подтягивается цена, установленная на весь магазин без категории и наименования.
2) Второй пример. Если в прайсе установлена цена на всю категорию "овощи" без указания магазина и наименований, то для всех овощей занесенных в БД, у которых магазин и наименование не находятся в прайсе, подтягивается соответствующая цена.
Может быть скомканно описал, в примере постарался наглядно показать.

Возникло ощущение, что подобная задача не решается стандартными средствами экселя...
 
Код
=ИНДЕКС(Таблица1[Цена];ЕСЛИОШИБКА(ПОИСКПОЗ(1;([@Магазин]=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*([@Товар]=Таблица1[Товар]);0);ЕСЛИОШИБКА(ПОИСКПОЗ(1;([@Магазин]=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*(""=Таблица1[Товар]);0);ПОИСКПОЗ(1;(""=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*([@Товар]=Таблица1[Товар]);0))))
Алексей М.
 
Цитата
VictorExcel:   помочь с формулой, которая позволит корректно подтянуть данные.
Есть некоторая неопределенность в таком подходе к тому же требующая корректного заполнения этих таблиц...
=ЕСЛИ(И(B5:D5<>"");ОКРУГЛ(ОСТАТ(МАКС(МУМНОЖ((G$5:I$9=B5:D5)+(ЛЕВБ(B$4:D$4;)=G$5:I$9)%;--ТРАНСП(G$4:I$4>0))*10^9+J$5:J$9);10^7);2);"")
 
Цитата
написал:
Код=ИНДЕКС(Таблица1[Цена];ЕСЛИОШИБКА(ПОИСКПОЗ(1;([@Магазин]=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*([@Товар]=Таблица1[Товар]);0);ЕСЛИОШИБКА(ПОИСКПОЗ(1;([@Магазин]=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*(""=Таблица1[Товар]);0);ПОИСКПОЗ(1;(""=Таблица1[Магазин])*([@Категория]=Таблица1[Категория])*([@Товар]=Таблица1[Товар]);0))))
АlехМ, благодарю за помощь! Однако данная формула не работает на моем уточненном примере от 16.05.2024 12:22:50.
 
Цитата
написал:
Есть некоторая неопределенность в таком подходе к тому же требующая корректного заполнения этих таблиц...=ЕСЛИ(И(B5:D5<>"");ОКРУГЛ(ОСТАТ(МАКС(МУМНОЖ((G$5:I$9=B5:D5)+(ЛЕВБ(B$4:D$4;)=G$5:I$9)%;--ТРАНСП(G$4:I$4>0))*10^9+J$5:J$9);10^7);2);"")
Павел \Ʌ/, спасибо! Формула действительно работает, но пока не могу её полностью осознать, чтобы корректно переложить на свою рабочую задачу :) Буду разбираться.
Изменено: VictorExcel - 20.05.2024 10:18:57
 
Цитата
написал:
Однако данная формула не работает на моем уточненном примере от 16.05.2024 12:22:50
Я решил, что у Ромашки яблоки по 50. Так как 70 у бананов. Подумал, что в правой, целевой таблице ошибка.
Алексей М.
 
АlехМ, вы всё правильно поняли. Это у меня была ошибка в целевой таблице. Но я имею в виду, что формула, хоть и хороша, но не позволяет реализовать более сложную схему подтягивания данных. Я позднее в сообщении от 16.05.2024 12:22:50 направил скорректированный пример.
 
Павел \Ʌ/, огромнейшее спасибо! Восхищён оригинальностью и компактностью решения!

Получилось переложить формулу на рабочую задачу, хотя больше механически. Концепция формулы примерно понятна, но сам бы ни за что бы не додумался. Есть куда расти :)
 
Павел \Ʌ/, подскажите, пожалуйста, возможно ли доработать вашу замечательную формулу так, чтобы решить следующую проблему. Если в базе по продажам аналитика заполнена значением, которое отсутствует в прайсе, но при этом в прайсе по этой аналитике есть значение "пусто", формула отлично подтягивает значение. Однако если в прайсе такой пустоты нет, т.е. аналитика в прайсе полностью заполнена значениями, необходимо проставить в базе по ценам 0. К сожалению формула все равно подтягивает некое значение. Прилагаю пример.
Изменено: VictorExcel - 29.05.2024 08:09:17
 
Цитата
...К сожалению формула все равно подтягивает некое значение
я намекал
Цитата
Есть некоторая неопределенность
Цитата
возможно ли доработать ...
...т.е. аналитика в прайсе полностью заполнена значениями, необходимо проставить в базе по ценам 0
{ }
=ЕСЛИОШИБКА(ОКРУГЛ(ОСТАТ(EXP(LN(МАКС(МУМНОЖ((G$5:I$9=B5:D5)+(ЛЕВБ(B$4:D$4;)=G$5:I$9)%;--ТРАНСП(G$4:I$4>0))*10^9+J$5:J$9)-10^9+1))/И(B5:D5<>"")-1;10^7);2);"")
 
Павел \Ʌ/, благодарю!!! Последняя неопределенность снята благодаря вам :)
Страницы: 1
Наверх