Страницы: 1
RSS
Развернуть формулой массивную запись для подсчета суммы из диапазона.
 

Всем здравствуйте, господа эксперты.

1.       Есть исходные данные во вкладке «ИсходныеДанные»

2.       Название сметы есть всегда.

3.       Раздел сметы и сумма может быть, а может и не быть.

4.       Во вкладке «Итог» массивно-динамически создаю уникальную запись сметы и раздел сметы (при наличии)

5.       Обращаю внимание: если раздел сметы есть, то от названия он отделяется пробелом с запятой « ,». Причем это разделитель не уникальный,  может быть и в названии сметы (уникальным же разделителем является либо слово «раздел» либо «без раздела»)

Задача: во вкладке «Итог» получить формулой сумму в каждой строке.

Условия: без PQ, без VBA, без дополнительных столбцов и предварительных (где-либо) расчетов.

Имеет задача решение? Подкиньте хотя бы идею ))

P/S/ естественно, вся эта конструкция имеет гораздо большее количество строк/столбцов. Для удобства восприятия всё «лишнее» вырезал.

P/S/S/ Долго думал над названием темы. Не ругайте, пожалуйста, сильно, если не заходит формулировка. Согласен на любую )

Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Сергей Евдокимов, Чем SUMIFS не подошла? А, понял. Сперва создаем трудности, потом их преодалеваем. А именно
02-01-07 Канализация К1, НК1, К2, К3, Раздел 2. Канализация хоз-бытовая (К1) сперва объединили так что не просто понять что разделяет запятая, а потом нужно отделить мух от котлет.
ну самое простое что приходит в голову при получении такого объединения в качестве разделителя добавить непечатный символ. Он виден не будет, но по нему будет просто разделить на раздел и .... Обработать отсутсвие и использовать SUMIFS для подсчета. Если без непечатного символа, то будут пляски с бубном. хотя тоже можно отделить всё что после последней зпятой и проверить есть ль такое в качестве раздела. Если есть то использовать его для условия по разделу и исключить из условия по названию, если нет то заменить на пусто.
Изменено: БМВ - 24.08.2022 07:57:27
По вопросам из тем форума, личку не читаю.
 
Сергей Евдокимов,
а чем сводная не подошла?
 
Доброго времени, как вариант:
Вредить легко, помогать трудно.
 
Еще вариант.
Код
=SUMIFS(ИсходныеДанные!$C$2:$C$276;ИсходныеДанные!$A$2:$A$276;IFERROR(LEFT(A2;SEARCH(",";A2)-1);A2);ИсходныеДанные!$B$2:$B$276;IFERROR(RIGHT(A2;LEN(A2)-SEARCH(",";A2)-1);""))

З.Ы. Ваши формулы в столбце А пришлось перевести в значения, ибо мой 2016-ый Excel их не понимал.
 
Цитата
написал:
А, понял. Сперва создаем трудности, потом их преодалеваем.
Вы совершенно правы, так и развиваемся ))
За идею спасибо. Толково! Сделал.

Behruz A.N., спасибо. Вижу работает. Осталось разобраться "как". Непростая формула у вас. Еще и с подменой запятых )

memo, спасибо. Решение ваше, если не ошибаюсь, немного не отвечает условию задачи (п.5), но суть понятна и это главное. А остальное - технические мелочи.
Изменено: Сергей Евдокимов - 24.08.2022 11:27:20
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Сергей Евдокимов написал:
Решение ваше, если не ошибаюсь, немного не отвечает условию задачи (п.5),
Думаю, ошибаетесь. Принцип идентичен решению из #4 только способ другой).
Update.
Сделал небольшую правку, не определялся предпоследний пункт.
Код
=SUMIFS(ИсходныеДанные!$C$2:$C$276;ИсходныеДанные!$A$2:$A$276;IFERROR(SUBSTITUTE(LEFT(A2;SEARCH(",";A2)-1);"/";",");A2);ИсходныеДанные!$B$2:$B$276;IFERROR(RIGHT(A2;LEN(A2)-SEARCH(",";A2)-1);""))
Изменено: memo - 24.08.2022 17:08:50
 
Так как не люблю данные исходные портить, то
=SUMIFS(ИсходныеДанные!C:C;ИсходныеДанные!A:A;SUBSTITUTE(A2;IF(TRIM(A2)<>TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));
IF(COUNTIF(ИсходныеДанные!B:B;TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999)));", "&TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));"");""););ИсходныеДанные!B:B;IF(TRIM(A2)<>TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));
IF(COUNTIF(ИсходныеДанные!B:B;TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999)));TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));"");""))
По вопросам из тем форума, личку не читаю.
 
Без изменение исходных данных:
Вредить легко, помогать трудно.
 
Код
=СУММ((A2=ИсходныеДанные!A$2:A$276&ЕСЛИ(ИсходныеДанные!B$2:B$276="";"";", "&ИсходныеДанные!B$2:B$276))*ИсходныеДанные!C$2:C$276)
Скажи мне, кудесник, любимец ба’гов...
 
для спорт инткреса
ну то что FILTERXML - тормоз еще тот , а так как офис 2016 у меня, то проверять Behruz A.N. не могу.
Сравнил свой и от  _Boroda_ по скорости. на указанных обьемах опередил вариант Саши, но оптимизация и уход от COUNTIF
=SUMIFS(ИсходныеДанные!C:C;ИсходныеДанные!A:A;SUBSTITUTE(A2;IF(TRIM(A2)<>TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));
IF(ISNUMBER(MATCH(TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));ИсходныеДанные!B:B;));", "&TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));"");""););ИсходныеДанные!B:B;IF(TRIM(A2)<>TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));
IF(ISNUMBER(MATCH(TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));ИсходныеДанные!B:B;));TRIM(RIGHT(SUBSTITUTE(TRIM(A2);",";REPT(" ";999));999));"");""))
сразу подтянул и думаю при росте данных начнет опережать.
Скрытый текст
что подтверждает увеличение размеров области данных
Скрытый текст
Изменено: БМВ - 25.08.2022 20:54:00
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх