Страницы: 1
RSS
Добавление новой строки таблицы с сохранением формул из предыдущей (макрос)
 
Добрый день!

Необходим макрос, который добавлял бы к таблице новую строку с сохранением формул из предыдущей строки и с сохранением структуры таблицы.

В ячейках E12, F12, G12, H12 прописаны формулы. По выполнению макроса необходимо, чтобы появилась новая 13 строка с сохранением всех объединений и границ предыдущей строки, а также с сохранением формул ячеек E12, F12, G12, H12. При повторном выполнении макроса 14 новая строка должна уже взять формулы из ячеек E13, F13, G13, H13, и так по кругу.
Кроме того, новая добавляемая строка должна вставать перед итоговой.

Таблица во вложении.
За помощь буду признательно благодарен!
Изменено: SevenZZ - 30.09.2018 09:48:51
 
Цитата
SevenZZ написал: Необходим макрос
1 - Заказ принимают в разделе "Работа".
2 - Без макроса. Оформить без выкрутасов в "шапке" данные списком/таблицей с промежуточными итогами и ... пользоваться... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Проверяйте.
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, то, что нужно, спасибо. Очень помогли.
 
Ts.Soft, если представляется возможным, то посодействуйте в еще одном небольшом макросе.
По выполнению уже имеющего макроса (добавлении необходимо количества строк, которые встают до итоговой) теперь необходимо, чтобы второй макрос вставил две строки после итоговой: первая - эта вся таже строка с формулами, а вторая итоговая. После использования второго макроса, первый макрос снова добавляет строки до итоговой строки, по выполнению второго макроса создаются опять две строки и так по кругу.

Примеры во вложении. Файл "до" это как до работы макроса. Файл "после" отражает как должно стать после запуска макроса.
Изменено: SevenZZ - 20.09.2018 23:28:05
 
Уже несколько дней пытаюсь справиться с данной задачей, все никак не получается. Быть может у кого-нибудь есть соображения?
 
SevenZZ,и соображения есть, но руки не доходят Вам помочь. Тем более что нужно будет корректировать формулу в итоговой строке. А добавление строки перед итоговой тоже нужно? Если да, то как Вы планируете выбирать перед какой именно итоговой строкой?
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, принцип таков, что расчет может осуществляться в разрезе как одной разнарядки, так и нескольких. Если в разрезе одной осуществляется, то первого Вашего макроса достаточно, а если по двум, то необходимо после первой итоговой строки вставить две строки: первая строка - это та строка, куда будут вводится необходимые значения (по сути это все та же строка, которая вставлялась до итоговой, только теперь она должна встать, после итоговой; вторая строка - это итоговая строка, по второй разнарядке. Выполнение второго макроса по вставке новых двух строк означает, что добавление строк до первой итоговой производится уже не будет, т.к. расчет в той части окончен. Добавление новых строк нужно, и этим занимается уже написанный Вами первый макрос.

Проще говоря расчет может быть многоэтапным. И добавление двух строк после первой итоговой символизирует о переходе ко второму этапу. Перейдя ко второму этапу, добавление строк происходит на основании первого макроса, и строки соответственно добавляются перед второй итоговой строкой. Переходя к третьему этапу (после второй итоговой суммы) добавляются снова две строки. Добавление строк перед итоговой строкой в третьем этапе происходит на основании также первого макроса. И так далее.
 
Решил свою проблему след. способом, возможно не самым умным и правильным, но как-то так
Код
Sub НоваяРазнарядка()Dim LastRow As Long
With Sheets("Лист1")
LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range(Cells(1, 1), Cells(1, ).Copy .Cells(LastRow + 1, 1)
LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range(Cells(2, 1), Cells(2, ).Copy .Cells(LastRow + 1, 1)
End With
End Sub
Единственное, теперь пытаюсь побороть, то что при добавлении новых строк в итоговой строке не меняется диапазон ячеек, которые суммируются.
Может у кого есть варианты, как решить данную проблему?
Изменено: SevenZZ - 23.09.2018 12:31:41
 
Знающие люди, отзовитесь!
Цитата
SevenZZ написал:
пытаюсь побороть, то что при добавлении новых строк в итоговой строке не меняется диапазон ячеек, которые суммируются.

Дополнил код одной строкой, и теперь макрос, таков:
Код
Sub add_row()
    EndRow = Cells(Rows.Count, 8).End(xlUp).Row
    Rows(EndRow).Insert Shift:=xlDown
    Rows(EndRow - 1).Copy Rows(EndRow)
    Range(Cells(EndRow, 1), Cells(EndRow, 4)).ClearContents
    Cells(Rows.Count, 7).End(xlUp)(2, 2).Resize(, Cells(1, Columns.Count).End(xlToLeft).Column - 7).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
End Sub
но вот ни как, не получается сделать, так, чтобы автосумма корректно считалась, т.е. первая итоговая строка суммирует весь диапазон ячеек, который над ней, вторая итоговая строка суммирует весь диапазон ячеек, который над ней, но до первой итоговой, третья итоговая строка суммирует весь диапазон ячеек над ней, но до второй итоговой и так далее.
 
SevenZZ, Вашу задачу можно решить несколькими способами. В принципе ТЗ выглядит так: необходимо на лист добавлять произвольное количество блоков из строк с данными и итоговой строкой. При этом пользователь в любой момент может удалять строки с данными и добавлять новые в любом блоке. К сожалению при этом может сбиваться формула суммы в итоговой строке.
Можно создать шаблон блока из трёх строк с данными и итоговой строкой. В итоге формула суммы с 1 по 3. Строки 1 и 3 скрываются. Дальше можно как угодно добавлять/удалять строки внутри блока (главное чтобы добавление происходило между скрытых строк) и тогда итоговая сумма сбиваться не будет.
Не стреляйте в тапера - он играет как может.
 
Предложу свой вариант.
Встаёте в таблицу нажимаете "Добавить строку". Добавляется строка ниже активной.
Если нажать "Добавить раздел", то создаётся ещё один раздел ниже.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, предложенный Вами вариант прямо в десятку. Спасибо.
Изменено: SevenZZ - 30.09.2018 21:07:34
Страницы: 1
Наверх