Sub сумма1() If Application.Sum([C7:F7]) > 0 Then Range("G7") = Application.Sum([C7:F7]) Else: Range("G7") = "" End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Range("C6:F100") If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then сумма1 End If End Sub
[/vba] Прошу помочь со следующим: 1. Макрос, в данном случае, суммирует значения только 7 строки, а как сделать так, чтобы он суммировал все строчки с 6 по 26, например, т.к. вручную заносить каждую строку довольно долго, и можно ли сделать так, чтобы суммировались строки до определенной ячейки, т.е. если в ячейке G26 имеется фраза "больше не суммировать" или "стоп", то суммируются строки с 6 по 25 включительно. 2. Макрос запускается при изменении в ячейках C6:F26, можно ли сделать так, чтобы он запускался до определенной ячейки, т.е. если в ячейке G26 имеется фраза "больше не суммировать" или "стоп", то при внесении изменений в строчки начиная с 26 макрос не запускался.
Добрый день, нарисовал такой макрос: [vba]
Код
Sub сумма1() If Application.Sum([C7:F7]) > 0 Then Range("G7") = Application.Sum([C7:F7]) Else: Range("G7") = "" End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Range("C6:F100") If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then сумма1 End If End Sub
[/vba] Прошу помочь со следующим: 1. Макрос, в данном случае, суммирует значения только 7 строки, а как сделать так, чтобы он суммировал все строчки с 6 по 26, например, т.к. вручную заносить каждую строку довольно долго, и можно ли сделать так, чтобы суммировались строки до определенной ячейки, т.е. если в ячейке G26 имеется фраза "больше не суммировать" или "стоп", то суммируются строки с 6 по 25 включительно. 2. Макрос запускается при изменении в ячейках C6:F26, можно ли сделать так, чтобы он запускался до определенной ячейки, т.е. если в ячейке G26 имеется фраза "больше не суммировать" или "стоп", то при внесении изменений в строчки начиная с 26 макрос не запускался.Garik007
Sub сумма1(ByVal rs) For x = 6 To rs Range("G" & x) = Application.Sum(Range("C" & x & ":F" & x)) If Range("G" & x) <= 0 Then Range("G" & x) = "" Next x End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range rs = Range("G:G").Find("больше не суммировать").Row - 1 Set rng = Range("C6:F" & rs) If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then сумма1 (rs) End If End Sub
[/vba]
Добрый день. Немного изменил, только надо добавить обработчик ошибки, если на листе будет отсутствовать
Sub сумма1(ByVal rs) For x = 6 To rs Range("G" & x) = Application.Sum(Range("C" & x & ":F" & x)) If Range("G" & x) <= 0 Then Range("G" & x) = "" Next x End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range rs = Range("G:G").Find("больше не суммировать").Row - 1 Set rng = Range("C6:F" & rs) If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then сумма1 (rs) End If End Sub