Всем привет. Есть необходимость в суммировании значений нарастающим итогом. Хотел применить такой код[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim a a = Array("$A$1") For i = 0 To UBound(a) If Target.Address Like "*" & a(i) & "*" Then With Target .Offset(, 1) = .Offset(, 1) + .Value End With Exit For End If Next End Sub
[/vba]но быстро понял, что он не будет работать. Дело в том, что значения в ячейку А1 на втором листе подтягиваются из ячейки А1 первого листа. Как я уже догадался, макрос не отслеживает изменения в ячейке, если в ней просто ссылка на другую. Вышел из положения просто записав[vba]
Код
Sub Макрос1() Range("D1").Formula = "=A1+B1" 'вводим формулу в D1 Range("D1").Copy 'копируем ячейку D1 Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'вставляем в В1 значения из буфера Range("D1").ClearContents ' очищаем содержимое ячейки D1 End Sub
[/vba]но ведь можно еще больше упростить Подскажите, пожалуйста, как. И, если не трудно, прокомментируйте каждую строку в "упрощенном" коде. Спасибо
Всем привет. Есть необходимость в суммировании значений нарастающим итогом. Хотел применить такой код[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim a a = Array("$A$1") For i = 0 To UBound(a) If Target.Address Like "*" & a(i) & "*" Then With Target .Offset(, 1) = .Offset(, 1) + .Value End With Exit For End If Next End Sub
[/vba]но быстро понял, что он не будет работать. Дело в том, что значения в ячейку А1 на втором листе подтягиваются из ячейки А1 первого листа. Как я уже догадался, макрос не отслеживает изменения в ячейке, если в ней просто ссылка на другую. Вышел из положения просто записав[vba]
Код
Sub Макрос1() Range("D1").Formula = "=A1+B1" 'вводим формулу в D1 Range("D1").Copy 'копируем ячейку D1 Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'вставляем в В1 значения из буфера Range("D1").ClearContents ' очищаем содержимое ячейки D1 End Sub
[/vba]но ведь можно еще больше упростить Подскажите, пожалуйста, как. И, если не трудно, прокомментируйте каждую строку в "упрощенном" коде. Спасибоlight26
честно говоря нифига не понял на какое событие должно прибавляться. активация второго листа? каждый ввод в ячейку первого должен суммироваться? или еще как? откуда берется значение в ячейке A1 первого листа?
честно говоря нифига не понял на какое событие должно прибавляться. активация второго листа? каждый ввод в ячейку первого должен суммироваться? или еще как? откуда берется значение в ячейке A1 первого листа?Nic70y
честно говоря нифига не понял на какое событие должно прибавляться.
после того, как в А1 на первом листе вставили значения из скопированного файла, на втором листе в А1 значение поменяется. Макрос должен отследить изменения в ячейке А1 (на любом листе) и к значению в ячейке В1 второго листа прибавить значение ячейки А1 второго листа. Значение в А1 первого листа могут и не измениться, например было 4, в вставили 4, но эта 4 должна также прибавиться к ячейке В1 второго листа.
честно говоря нифига не понял на какое событие должно прибавляться.
после того, как в А1 на первом листе вставили значения из скопированного файла, на втором листе в А1 значение поменяется. Макрос должен отследить изменения в ячейке А1 (на любом листе) и к значению в ячейке В1 второго листа прибавить значение ячейки А1 второго листа. Значение в А1 первого листа могут и не измениться, например было 4, в вставили 4, но эта 4 должна также прибавиться к ячейке В1 второго листа.
вставка вручную производиться? листов в которые вставляется много или один?
если это событие первого листа, то в его модуль [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then Sheets(2).[b1] = Sheets(2).[b1] + [a1] End If End Sub
[/vba]
после цитат и редактирования весь пост сбился
вставка вручную производиться? листов в которые вставляется много или один?
если это событие первого листа, то в его модуль [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then Sheets(2).[b1] = Sheets(2).[b1] + [a1] End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then Sheets(2).[b1] = Sheets(2).[b1] + [a1] End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1")) Is Nothing Then Sheets(2).[b1] = Sheets(2).[b1] + [a1] End If End Sub
Вадим, Change, это меняю. Модно часы на трусы, можно трусы мужские, на трусы женские. Но когда трусы мужские на трусы мужские, да еще и свои, это не меняю, это переодеваю. А Excel переодеваться не умеет. Может он захочет посчитать, а не переоделся ли ты? (Calculate)
Вадим, Change, это меняю. Модно часы на трусы, можно трусы мужские, на трусы женские. Но когда трусы мужские на трусы мужские, да еще и свои, это не меняю, это переодеваю. А Excel переодеваться не умеет. Может он захочет посчитать, а не переоделся ли ты? (Calculate)RAN
Андрей, привет. Ты, как всегда, максимально завуалировал свою подсказку ))) Как я понял, первая строка говорит, что код должен выполняться только для рабочего листа при каких-либо изменениях на нем, так? Изменения на листе происходят, так? Почему тогда макрос не суммирует?
Андрей, привет. Ты, как всегда, максимально завуалировал свою подсказку ))) Как я понял, первая строка говорит, что код должен выполняться только для рабочего листа при каких-либо изменениях на нем, так? Изменения на листе происходят, так? Почему тогда макрос не суммирует?light26