Здравствуйте, подскажите пожалуйста как сделать так, чтобы содержимое, введенное в ячейку просуммировалось с другой ячейкой, после чего она бы обнулилась.
Пример: ввожу в A1 "2" в В1 появляется 2, после чего А1 обнуляется. далее в А1 "4", в В1 появляет 6, а А1 обнуляется
Помогите, пожааалуйста!
Здравствуйте, подскажите пожалуйста как сделать так, чтобы содержимое, введенное в ячейку просуммировалось с другой ячейкой, после чего она бы обнулилась.
Пример: ввожу в A1 "2" в В1 появляется 2, после чего А1 обнуляется. далее в А1 "4", в В1 появляет 6, а А1 обнуляется
правой кнопкой мыши по ярлыку листа - "Исходный текст", туда это: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba]
правой кнопкой мыши по ярлыку листа - "Исходный текст", туда это: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
У Александра почти то, что нужно, но: 1. Как изменить код, чтобы условие выполнялось для всех ячеек столбцов А и В? То есть если я буду вводить значение, например, в А5, то в В5 значения будут суммироваться. 2. Значение не должно удаляться после ввода его в ячейки столбца А. Ну тут, вроде, все просто. Код примет такой вид: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Application.EnableEvents = True End If End Sub
[/vba] Правильно?
У Александра почти то, что нужно, но: 1. Как изменить код, чтобы условие выполнялось для всех ячеек столбцов А и В? То есть если я буду вводить значение, например, в А5, то в В5 значения будут суммироваться. 2. Значение не должно удаляться после ввода его в ячейки столбца А. Ну тут, вроде, все просто. Код примет такой вид: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Application.EnableEvents = True End If End Sub
как же может быть правильно, если там A5 в помине нет... [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) With Target ' много Target'ов - выделяем его в конструкцию With If .Column = 1 Then ' если произошло изменение в столбце №1, т.е. "A" Application.EnableEvents = False ' вырубаем обрабоку событий, ибо след. строка меняет ячейку => вызывает это же событие (если не выключить) .Offset(, 1) = .Offset(, 1) + .Value ' .Offset(, 1) - смещение отн-но Target на 0 строк и 1 столбец, т.е. это соседняя справа ячейка Application.EnableEvents = True ' включаем ранее выключенное End If End With End Sub
[/vba]
как же может быть правильно, если там A5 в помине нет... [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) With Target ' много Target'ов - выделяем его в конструкцию With If .Column = 1 Then ' если произошло изменение в столбце №1, т.е. "A" Application.EnableEvents = False ' вырубаем обрабоку событий, ибо след. строка меняет ячейку => вызывает это же событие (если не выключить) .Offset(, 1) = .Offset(, 1) + .Value ' .Offset(, 1) - смещение отн-но Target на 0 строк и 1 столбец, т.е. это соседняя справа ячейка Application.EnableEvents = True ' включаем ранее выключенное End If End With End Sub
Саня, насколько я знаю, target-это цель. То-есть вторая строка кода "поясняет", что целей (в нашем случае ячеек) будет много. Затем задаем "адрес" этого "много": Column = 1. Правильно я понимаю?
Саня, насколько я знаю, target-это цель. То-есть вторая строка кода "поясняет", что целей (в нашем случае ячеек) будет много. Затем задаем "адрес" этого "много": Column = 1. Правильно я понимаю?light26
target - это та ячейка (ячейки), которую(ые) изменили - событие же Worksheet_Change
Quote
много Target'ов
имеется ввиду, что много раз в коде присутствует Target, во так было бы без With [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False Target.Offset(, 1) = Target.Offset(, 1) + Target.Value Application.EnableEvents = True End If End Sub
[/vba]
target - это та ячейка (ячейки), которую(ые) изменили - событие же Worksheet_Change
Quote
много Target'ов
имеется ввиду, что много раз в коде присутствует Target, во так было бы без With [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False Target.Offset(, 1) = Target.Offset(, 1) + Target.Value Application.EnableEvents = True End If End Sub
Вадим, мой пример в точности с пожеланиями ТС. О нарастающем итоге не было ни слова. Файла не было. Зато было скучно... В моем макросе 90% того, что там совсем не нужно, и все мои труды были направлены на то, чтобы это ненужное заставить работать!
Вадим, мой пример в точности с пожеланиями ТС. О нарастающем итоге не было ни слова. Файла не было. Зато было скучно... В моем макросе 90% того, что там совсем не нужно, и все мои труды были направлены на то, чтобы это ненужное заставить работать! RAN
RAN, Да я не с целью хоть как-то твои достоинства преуменьшить. Просто по описанию задача похожа на суммирование нарастающим итогом, а в твоем макросе суммируются только "2" и "4" и только со знаком "+". Кстати, если из А1 значение вообще удалить, VBA начинает ругаться. И, по-моему, матом )
RAN, Да я не с целью хоть как-то твои достоинства преуменьшить. Просто по описанию задача похожа на суммирование нарастающим итогом, а в твоем макросе суммируются только "2" и "4" и только со знаком "+". Кстати, если из А1 значение вообще удалить, VBA начинает ругаться. И, по-моему, матом )light26
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba] А1 и В1 просто заменить на диапазон А:А и В:В, как в формулах? Я попробовал, макрос работать перестал, но и не ругался
Саня, а если в этом коде [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Application.EnableEvents = False Range("B1") = Range("B1") + Range("A1") Range("A1").ClearContents Application.EnableEvents = True End If End Sub
[/vba] А1 и В1 просто заменить на диапазон А:А и В:В, как в формулах? Я попробовал, макрос работать перестал, но и не ругалсяlight26
Ну опять не правильно сформулировал. Я хотел спросить можно ли указать диапазон не номером колонки или строки, а так, как указываем в формулах А:А, В:В...
Quote (Саня)
задал вопрос
Ну опять не правильно сформулировал. Я хотел спросить можно ли указать диапазон не номером колонки или строки, а так, как указываем в формулах А:А, В:В...light26
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A:А").Address Then Application.EnableEvents = False Range("B:В") = Range("B:В") + Range("A:А") Range("A:А").ClearContents Application.EnableEvents = True End If End Sub
[/vba] Вот такую хрень родило мое больное воображение )))
Написал - это громко сказано ))) [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A:А").Address Then Application.EnableEvents = False Range("B:В") = Range("B:В") + Range("A:А") Range("A:А").ClearContents Application.EnableEvents = True End If End Sub
[/vba] Вот такую хрень родило мое больное воображение )))light26
да там на всех ренджах ошибки выдает, попробуй вставить этот код и проверить а ведь ты даже не проверял ничего, а написал этот "код" прям здесь, на форуме...
Quote (light26)
а тут проглотил и ни разу не возмутился
да там на всех ренджах ошибки выдает, попробуй вставить этот код и проверить а ведь ты даже не проверял ничего, а написал этот "код" прям здесь, на форуме... Саня