Страницы: 1
RSS
Получить сумму значений по условию
 
Есть список товаров для которых указан список продуктов с указанным весом каждого продукта.

Нужно в столбце D напротив каждого Product code получить общую суму веса всех продуктов для каждого товара.

Заранее благодарен за помощь
Изменено: realmen80 - 28.10.2023 14:09:53 (добавил файл пример)
 
Заполните все ячейки столбца ProductCode и воспользуйтесь функцией СУММЕСЛИ()
Согласие есть продукт при полном непротивлении сторон
 
Файл-пример в студию.
 
Цитата
написал:
Файл-пример в студию.
Прошу прощения... Забыл прикрепить... Прикрепил к сообщению первому
 
Цитата
написал:
Заполните все ячейки столбца ProductCode и воспользуйтесь функцией СУММЕСЛИ()
Как можно массово заполнить все пустые ячейки ProductCode кодом товара?
Что нужно указывать как критерий в функции чтобы получить сумму только в одной строчке напротив кода товара?
 
realmen80 Здравствуйте в файле как получится о чем сказал Sanja
 
Лучше будет
Цитата
о чем сказал Sanja
но если сильно хочется
{ }
=ЕСЛИ(A2="";"";СУММ(C2:ИНДЕКС(C2:C$26;ЕСЛИОШИБКА(ПОИСКПОЗ(1=1;A3:A$27<>""; );ЧСТРОК(C2:C$26)))))
 
С доп.столбцом
Согласие есть продукт при полном непротивлении сторон
 
Спасибо всем за помощь. То что нужно
 
=IF(A2<>"";IFERROR(SUM(C2:INDEX(C:C;ROW()+MATCH("*";A3:A$32767;)-1));SUM(C2:$C$32767));"")
Изменено: БМВ - 28.10.2023 18:05:01
По вопросам из тем форума, личку не читаю.
 
Ну и мой вариант:
Код
=IFERROR(1/(1/(SUMPRODUCT((LOOKUP(ROW($A$2:$A$35);ROW($A$2:$A$35)/($A$2:$A$35>0);$A$2:$A$35)=A2)*($C$2:$C$35>0)*$C$2:$C$35)));"")
 
Déjà vu?
Пришелец-прораб.
 
Че-то тупанул я,
=IF(A2<>"";SUM(C2:INDEX(C:C;IFERROR(ROW()+MATCH("*";A3:A$32767;)-1;32767)));"")
и это в дполтора раза быстрее чем у
memo

и это при том что у меня стоит ограничение в 32К строк то SUMPRODUCT умирает
Изменено: БМВ - 28.10.2023 21:08:43
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ   и это в дполтора раза быстрее чем у memo
Здравствуйте. БМВ Расскажите пожалуйста, а как вы скорость формулы вычисляете. Вот для макросов знаю как, а для формул не умею, Если это не секрет
 
Евгений Смирнов,
Код
Sub testspeed()
Application.Calculation = xlCalculationManual
For Each Cell In Selection
Application.Wait Now() + CDate("0:0:1")
t = Timer
For i = 1 To 10000
    Cell.Calculate
Next
Debug.Print Cell.Formula, (Timer - t) * 1000
Next
Application.Calculation = xlCalculationAutomatic
End Sub

единственное что нужно это количество циклов иногда уменьшить а то можно результата не дождаться :-)
По вопросам из тем форума, личку не читаю.
 
БМВ Благодарю. Как нибудь надо попробовать проверить. Сегодня уже поздно,. голова не соображает, пора спать.
 
Ну и Сводная. До кучи
Согласие есть продукт при полном непротивлении сторон
 
Чуть переделал, вроде быстрее.
Код
=IF(E2>0;SUM(INDEX(LOOKUP(ROW($E$2:$E$13);ROW($E$2:$E$13)/($E$2:$E$13>0);$E$2:$E$13=E2)*$F$2:$F$13;));"")
 
Цитата
memo написал:
Чуть переделал, вроде быстрее.
если еще уменьшить диапазон, то совсем будет быстро :-)
Попробуйте не 13 а 100,500, 1000
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ:   MATCH("*"
ну да )   шота про нечеткий поиск не подумалось
Вариации на тему
=ЕСЛИ(A2="";"";СУММ(C2:ИНДЕКС(C2:C$32766;ЕСЛИОШИБКА(ПОИСКПОЗ("*";A3:A$32767;);32767-СТРОКА()))))
 
Цитата
БМВ написал:
Попробуйте не 13 а 100,500, 1000
Когда переносил, не взглянул на диапазон. Попробовал на 10000. Не очень. Ну понятно, что такая схема быстро работать не будет - 50-100 записей вполне сносно.
 
memo,  тут ведь еще дело в том что MATH используемый диапазон, а не указанный использует использует, и скорость практически не зависит.

=IF(A2<>"",SUM(C2:INDEX(C:C,IFERROR(ROW()+MATCH("*",A3:A$35,)-1,35))),"")           390,625
=IF(A2<>"",SUM(C2:INDEX(C:C,IFERROR(ROW()+MATCH("*",A3:A$32767,)-1,32767))),"")     386,7188
=IF(A2<>"",SUM(C2:INDEX(C:C,IFERROR(ROW()+MATCH("*",A3:A$100000,)-1,100000))),"")   359,375
=IF(A2<>"",SUM(C2:INDEX(C:C,IFERROR(ROW()+MATCH("*",A3:A$1000000,)-1,1000000))),"")  382,8125
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх