Страницы: 1
RSS
На основании порядкого номера найти цену с самой поздней датой
 
Приветствую, Всех экспертов и добродетелей;)

Помогите пжс с решением такой задачки. Пробовал связать ЕСЛИ и ВПР, но все тщетно. Не понимаю как при повторяющемся значении сделать выборку в пользу МАКС в определенном диапазоне.

Сам пример.
Лист1
Необходимо на основании порядкого номера (столбец А) найти цену (столбец В) с самой поздней датой (столбец С)

Лист2
ВПР (столбец В) на результат с первого листа
 
Формула
Код
=AGGREGATE(14;6;C$2:C$22/(I2=A$2:A$22);1)
 
Не выдает результата, ссылается на (I2=A$2:A$22), говорит что здесь ошибка.

Если не сложно расскажите пжс как это должно рабоать. Я понял это так, что в диапазоне C$2:C$22 он ищет наибольшее произведение. Скорее всего для вывода значения потребуется пустая ячейка (I2), а вот дальше не понимаю о чем формула.... :(  
 
Цитата
Gonchar написал:
как это должно рабоать.
да не совсем работать оно должно, так как не полно
вариантов много
вот массивный
=INDEX(Лист1!$B$2:$B$22;MATCH(A2&"_"&MAX(IF(A2=Лист1!$A$2:$A$22;Лист1!$C$2:$C$22));Лист1!$A$2:$A$22&"_"&Лист1!$C$2:$C$22);)

Если уникальность есть то можно так
=SUMIFS(Лист1!$B$2:$B$22;Лист1!$A$2:$A$22;A2;Лист1!$C$2:$C$22;MAX(IF(A2=Лист1!$A$2:$A$22;Лист1!$C$2:$C$22)))
или не массивно
=SUMIFS(Лист1!$B$2:$B$22;Лист1!$A$2:$A$22;A2;Лист1!$C$2:$C$22;AGGREGATE(14;6;Лист1!$C$2:$C$22/(A2=Лист1!$A$2:$A$22);1))
Изменено: БМВ - 02.06.2020 16:41:52
По вопросам из тем форума, личку не читаю.
 
Извините за ошибку. Решение доработал.
Формула
Код
=IFERROR(INDEX(Лист1!B$2:B$22;AGGREGATE(15;6;ROW($1:$100)/(AGGREGATE(14;6;Лист1!C$2:C$22/(A2=Лист1!A$2:A$22);1)=Лист1!C$2:C$22)/(A2=Лист1!A$2:A$22);1));"")
 
Круто, спасибо, качественно!
 
Код
=ИНДЕКС($B$2:$B$22;ПОИСКПОЗ(F3&АГРЕГАТ(14;6;($C$2:$C$22)/($A$2:$A$22=F3);1);$A$2:$A$22&$C$2:$C$22;0))
 
Ребята Всем огромное спасибо за отзывчивость!!!

Не сочтите за наглость, но я забыл об одном нюансе, а именно то что данные на Лист2 могут не совпадать, т.е. их больше чем данных в Лист1. Не буду таить и приложу сразу два файла. На выходе мы должны получить следующее.

Лист2, в колонке "I" должна получиться стоимость изделия с последней стоимостью по дате из Листа1, ориентироваться необходимо на уникальный 10ти значный код.

P.S. Если Вы считаете, что подобный труд необходимо оценить...welcome
 
ну если просто адаптировать один из вариантов выше, то
=IFERROR(INDEX('[Лист1.xlsx]Не трогать, для сводника'!$I:$I;MATCH(B3&"_"&MAX(IF('[Лист1.xlsx]Не трогать, для сводника'!$A$1:$A$1000=B3;'[Лист1.xlsx]Не трогать, для сводника'!$F$1:$F$1000));'[Лист1.xlsx]Не трогать, для сводника'!$A$1:$A$1000&"_"&'[Лист1.xlsx]Не трогать, для сводника'!$F$1:$F$1000;));"")
Но как отмечал выше вариантов много.
Изменено: БМВ - 03.06.2020 16:06:20
По вопросам из тем форума, личку не читаю.
 
Формула прежняя,только меняются диапазоны
Код
=IFERROR(INDEX(лист1!I$2:I$1000;AGGREGATE(15;6;ROW($1:$1000)/(AGGREGATE(14;6;лист1!$F$2:$F$1000/(B3=лист1!A$2:A$1000);1)=лист1!F$2:F$1000)/(B3=лист1!A$2:A$1000);1));"")
 
Ну если  в эти игры играть, то чтоб два раза не гонять агрегат
=IFERROR(INDEX(Лист1.xlsx!I:I;MOD(AGGREGATE(14;6;(Лист1.xlsx!$F$2:$F$1000+ROW(Лист1.xlsx!$F$2:$F$1000)%%%)/(B4=Лист1.xlsx!A$2:A$1000);1);1)/1%%%+0,1);"")
Изменено: БМВ - 03.06.2020 19:17:36
По вопросам из тем форума, личку не читаю.
 
Ещё предлагаю формулу для поста №10 без функции АГРЕГАТ и без "выкрунтасов"
Код
=IFERROR(LOOKUP(2;1/(MAX(INDEX(лист1!$F$2:$F$1000*(B3=лист1!A$2:A$1000);0))=лист1!F$2:F$1000)/(B3=лист1!A$2:A$1000);лист1!I$2:I$1000);"")
 
Цитата
jakim написал:
и без "выкрунтасов"
ли? :-)  А INDEX( ;)? :-)  Тут еще на производительность надо глянуть. Все ж MOD и один AGGREGATE будет быстрее на мой взгляд чем  LOOKUP + MAX. Могу предположить что и LARGE или MAX будет также в связке с MOD лучше.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх