Страницы: 1
RSS
Парсер сметы с подчиненными строками 11 граф формулой в новых версиях Excel
 
Пример прилагаю.
Основная проблема это подчиненные строки (например 1.1 относящиеся к работе 1) и необходимость вывести наименование раздела.
Там где раздел цена без НДС =0
Где есть подчиненные строки например п.60 60.1 60.2 60.3 60.4 работа п.60 равна всего по позиции минус сумма (стоимостей позиций 60.1+60.2+60.3+60.4)
Массив материалов примерно в столбце J получился а как условия подчиненности применить не могу сообразить
Изменено: Тимофеев - 07.02.2025 17:48:55
 
Цитата
Парсер ... формулой
Тимофеев, спортивный интерес? )
Могу предложить путь по которому я бы двигался:  Основная суть  -  это синтез плоской таблицы (думаю, вам объяснять не надо что с ней проще работать)
на примере создания одной категории:
формула
 
не знаю Павел - запутали меня только этим блоком
в примере прикрепил в K столбце цифры которые должны встать вместо нулей в столбец G - но порядок их в массиве конечно не радует совсем - т.е. работу нужно взять из последней подчиненной строки материала
Изменено: Тимофеев - 10.02.2025 11:14:15
 
Тимофеев, я имел ввиду создать плоскую таблицу, где один столбец это раздел, следующий категория, подкатегория и тд, и столбец со значениями, а потом ее уже агрегировать как надо...
а вот выводить результат в подобном "корявом" виде подумать еще надо... )
...как идея - перевернуть таблицу и сумма с накоплением (МУМНОЖ в более свежих СВОДПО возможно и LAMBDA, у меня в 21-ом таких нет)
в моей версии экселя, конечно повозиться придется
 
в общем получилось так явно не оптимально.
Кстати в 24 Excel более свежие уже есть - надо переходить
Код
=ЕСЛИОШИБКА(ИНДЕКС(
ФИЛЬТР('2'!$K$21:$K$5000;('2'!$C$21:$C$5000="Всего по позиции")
+('2'!$C$21:$C$5000=0)*('2'!$A$21:$A$5000<>"")+('2'!$I$21:$I$5000<>0)*('2'!$A$21:$A$5000<>""))
-SCAN(0;ФИЛЬТР('2'!$K$21:$K$5000;('2'!$A$21:$A$5000<>""));LAMBDA(a;b;ЕСЛИ(b<>0;a+b;a-a)));
ПОИСКПОЗX(ФИЛЬТР('2'!$A$21:$A$5000;('2'!$A$21:$A$5000<>""))&".*";ФИЛЬТР('2'!$A$21:$A$5000;('2'!$A$21:$A$5000<>""));2;-1));0)
+ФИЛЬТР('2'!$K$21:$K$5000;('2'!$A$21:$A$5000<>""))
Страницы: 1
Наверх