Доброго времени суток уважаемые форумчане! В макросах я, увы, полный ноль, а задачка вероятно именно для них. В похожих темах на этом и других форумах подходящего для себя решения не нашел. Есть шаблон сметы материала и проведение работ. Нужно, чтобы при заполнении любой из ячеек в столбцах "Наименование материала", "Единица", "Кол-во" или "Цена за ед. товара" ниже добавлялась строка с такими же формулами и форматированием, как верхняя. В прикрепленном файле на Лист1 собственно шаблон сметы с формулами в первой строке, на Лист 2 - добавляется вторая строка при заполнении данных в первой. Важно, чтобы макрос работал только в области сметы на материалы (условия не затрагивали изменения в других частях листа). Буду крайне благодарен за помощь в решении.
Доброго времени суток уважаемые форумчане! В макросах я, увы, полный ноль, а задачка вероятно именно для них. В похожих темах на этом и других форумах подходящего для себя решения не нашел. Есть шаблон сметы материала и проведение работ. Нужно, чтобы при заполнении любой из ячеек в столбцах "Наименование материала", "Единица", "Кол-во" или "Цена за ед. товара" ниже добавлялась строка с такими же формулами и форматированием, как верхняя. В прикрепленном файле на Лист1 собственно шаблон сметы с формулами в первой строке, на Лист 2 - добавляется вторая строка при заполнении данных в первой. Важно, чтобы макрос работал только в области сметы на материалы (условия не затрагивали изменения в других частях листа). Буду крайне благодарен за помощь в решении.zaytsev-msk-rosah
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.ScreenUpdating = False 'отключение обновления экрана Application.EnableEvents = False 'отключение событий a = Target.Row 'строка изменяемой ячейки b = Target.Column 'столбец изменяемой ячейки 'если строка > 3 и столбец >1<6, т.е. от Наименование материала до Цена за ед. товара If a > 3 And b > 1 And b < 6 Then c = Range("a" & a - 1).Value 'значение ячейки столбца A, выше на 1 строку If IsNumeric(c) = False Then c = 0 'если значение не число, приравниваем к 0 d = a - c - 2 'из строки вычетаем № п/п и 2, что бы получить строку, где Смета материалов 'если это радел Смета материалов, тогда If Range("a" & d).Value = "Смета материалов" Then e = Range("a" & a + 1).Value '№п/п ниже строки f = Application.CountA(Range("b" & a & ":e" & a)) 'кол-во заполненных 'если ниже нет №п/п и есть хотя бы 1 заполненная ячейка в вводимой строке, тогда If e = "" And f > 0 Then Rows(a + 1).Insert Shift:=xlDown 'добавляем строку 'формулы Range("a" & a & ":a" & a + 1).FormulaR1C1 = "=IF(OR(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),ROW()-3,"""")" Range("f" & a & ":f" & a + 1).FormulaR1C1 = "=IF(OR(RC[-4]<>"""",RC[-3]<>"""",RC[-2]<>"""",RC[-1]<>""""),RC[-2]*RC[-1],"""")" End If End If End If Application.ScreenUpdating = True 'включение обновления экрана Application.EnableEvents = True 'включение событий End Sub
[/vba]
макрос в модуле книги [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.ScreenUpdating = False 'отключение обновления экрана Application.EnableEvents = False 'отключение событий a = Target.Row 'строка изменяемой ячейки b = Target.Column 'столбец изменяемой ячейки 'если строка > 3 и столбец >1<6, т.е. от Наименование материала до Цена за ед. товара If a > 3 And b > 1 And b < 6 Then c = Range("a" & a - 1).Value 'значение ячейки столбца A, выше на 1 строку If IsNumeric(c) = False Then c = 0 'если значение не число, приравниваем к 0 d = a - c - 2 'из строки вычетаем № п/п и 2, что бы получить строку, где Смета материалов 'если это радел Смета материалов, тогда If Range("a" & d).Value = "Смета материалов" Then e = Range("a" & a + 1).Value '№п/п ниже строки f = Application.CountA(Range("b" & a & ":e" & a)) 'кол-во заполненных 'если ниже нет №п/п и есть хотя бы 1 заполненная ячейка в вводимой строке, тогда If e = "" And f > 0 Then Rows(a + 1).Insert Shift:=xlDown 'добавляем строку 'формулы Range("a" & a & ":a" & a + 1).FormulaR1C1 = "=IF(OR(RC[1]<>"""",RC[2]<>"""",RC[3]<>"""",RC[4]<>""""),ROW()-3,"""")" Range("f" & a & ":f" & a + 1).FormulaR1C1 = "=IF(OR(RC[-4]<>"""",RC[-3]<>"""",RC[-2]<>"""",RC[-1]<>""""),RC[-2]*RC[-1],"""")" End If End If End If Application.ScreenUpdating = True 'включение обновления экрана Application.EnableEvents = True 'включение событий End Sub