Ячейка с накоплением (нарастающим итогом)
Достаточно часто возникает ситуация, когда нам необходимо суммировать (накапливать) несколько последовательно введенных в одну ячейку значений:
Т.е. если, например, ввести в ячейку А1 число 5, то в B1 должно появиться число 15. Если затем ввести в А1 число 7, то в ячейке B1 должно появится 22 и т.д. Вобщем то, что бухгалтеры (и не только они) называют накопительный итог.
Реализовать такую накопительную ячейку-аккумулятор можно при помощи простого макроса. Щелкните правой кнопкой мыши по ярлычку листа, где находятся ячейки А1 и B1 и выберите в контекстном меню Исходный текст (Source Code). В открывшееся окно редактора Visual Basic скопируйте и вставьте код простого макроса:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) With Target If .Address(False, False) = "A1" Then If IsNumeric(.Value) Then Application.EnableEvents = False Range("A2").Value = Range("A2").Value + .Value Application.EnableEvents = True End If End If End With End Sub
Адреса ячеек А1 и A2, естественно, можно заменить на свои.
Если отслеживать ввод данных и суммировать нужно не отдельные ячейки, а целые диапазоны, то макрос придется немного изменить:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Not Intersect(Target, Range("A1:A10")) Is Nothing Then If IsNumeric(Target.Value) Then Application.EnableEvents = False Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value Application.EnableEvents = True End If End If End Sub
Предполагается, что ввод данных производится в ячейки диапазона A1:A10, а суммируются введенные числа в соседний столбец справа. Если в вашем случае он не соседний, то увеличьте сдвиг вправо в операторе Offset - замените 1 на число побольше.
Ссылки по теме
Ячеек для ввода данных несколько, в столбик, а ячейка для накопления данных одна. Как так сделать?.
на
где B1 - ваша одна ячейка накопления
А как оформляются несколько разных процедур, если в интервал попадают столбцы, которые не нужны для накопления? Например, из столбца I перенести на 3, а из столбца K (через один) на 5. Заранее прошу прощения за излишнее любопытство, но очень хочется освоить этот прием до конца
Будет немного громоздко, но зато не запутаетесь.
Если нужно плюсовать только при изменении результата формулы после пересчета, то придется в макросе где-то хранить предыдущее значение и при каждом пересчете сравнивать новое значение со старым. И плюсовать только в том случае, если оно изменилось.
Спасибо.
"Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A2:F2")) Is Nothing Then
If IsNumeric(Target.Value) Then
Application.EnableEvents = False
Range("G2").Value = Range("G2").Value + Target.Value
Application.EnableEvents = True
End If
End If
End Sub"
Подскажите, пожалуйста, как сделать неограниченное количество таких строк?
Хотим сделать книгу контроля наличия запчастей на складе. Листов в книге будет 32, в листах с 1 по 31 - столбцы диапазона А;F будут соответствовать подразделениям получающим запчасти, каждая строка - определённой детали. Листы все одинаковые, данные из столбцов G будут суммироваться на листе 32. Туда же, на 32 лист будут забиваться данные об остатках с прошлого месяца и о поступлениях запчастей, в результате будет видно наличие той или иной запчасти на данный момент. Вот такая задумка. Получится ли?
Сергей, а чем вам, в данном случае, обычные формулы не подходят? Прописать в G3 формулу =СУММ(A3:F3) и скопировать вниз, я имею ввиду.
По поводу простых формул, дело в том, что отдельные подразделения в период ремонта могут брать, например болтов М10, по несколько раз за день. Будет надёжней если суммировать будет Ексель, а не Джамшут.
И ещё вопрос - при появлении новых запчастей придётся в каждый лист, в определённое место, добавлять новую строку с наименованием. Возможно ли это автоматизировать? Например добавил в 32 лист - появилась в остальных? Или это отдельная тема? Архив форума просмотрел до 40 страницы, пока не нашёл. Впереди ещё 1000 с лишним.
Сначала выделите все листы (удерживая CTRL или SHIFT щелкаете по ярлычкам листов), а потом вводите новые данные на один из них - они добавятся на все.
есть вопрос о ячейке с накоплением через н-ую строчку. Напр. столбик А - ячейка A10 - 1-я, 4-я и 7-я и ячейка A11 - 2-я, 5-я и 8-я строчки, т.е. через каждую 3-ю строчку. Cтолбик B описывается таким кодом
Однако, если взять поштучно, т.е. скопировать формулу и вставить в ОДНО поле ввода данных (для их соответ-го обновления), то поле накопления корректно меняется. Но строк-то более 500 - в каждую руками всталять долго.
А также, если после вставки формулы в поле ввода данных нажать F2 и Ввод, то поле накопления также корректно меняется.
ВОПРОС: что необходимо сделать, чтобы поле накопления менялось и после вставки в поле ввода формулы (без проваливания в каждую по F2) ?? - ооочень нужно, помогите пожалуйста.
Исходный код такой:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("o7:o5000";)) Is Nothing Then
If IsNumeric(Target.Value) Then
Application.EnableEvents = False
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target
Application.EnableEvents = True
End If
End If
End Sub
макрос работает великолепно, спасибо за Ваши подсказки.
помогите пожалуйста когда ввожу данные на А1, на А2 накапливается, замечательно. как можно сделать так, когда вводишь например данные на B1, из сумм накопленных на А2 минусовалось. Вводя данные на А1 и на В1 по очередности хотелось бы увидеть результат на А2. Ячейка А2 находится на другом листе.
Подскажите пожалуйста как запрограммировать макрос так что бы данные забивались в одной рабочей книге excel а суммировались в другой? Я только учусь работать с макросами и пока не очень хорошо разбираюсь. Помогите, буду вам очень благодарен!
Спасибо за макрос! Возможно ли сделать чтобы данный макрос срабатывал не автоматически, а например при нажатии кнопки(либо другой команды на выполнение)?
Мои познания VBA ограничены макрорекордером и, иногда, методом "научного тыка". Когда первым способом решить задачу невозможно, а второй не помогает, я вынужден обращаться за помощью. Поэтому я очень прошу Вас каждую строку макроса расписать, чтобы понимать как он работает? Например:
Для наглядности: есть макрос
Спасибо
Первый раз сегодня попробовал работу с макросом и сразу удача!!!
Особенно пост от 14 февраля 2015 года.
Именно то что нужно...
Спасибо огромное!!!
Ни как не пойму где "исходный текст"
Помогите реализовать такой вариант, надо в ячейку вложить все значения, по всем листам, где строка равняется значению ссылки на ячейку на отдельном листе. Может стоит разделить на файлы, а потом вводить макрос?
Я не смог решить такую задачу, помогите, пожалуйста: в умной таблице в одной колонке содержаться числовые данные, которые постоянно обновляются, а в другой колонке, имеющей процентный формат, необходимо реализовать отображение нарастающего итога. При этом этот нарастающий итог должен сам определять минимальное значение в исходном столбце вне зависимости от сортировки этого столбца.
Если есть решение попроще в виде какой-нибудь формулы, было бы здорово его применить. С макросами не дружу, поскольку являюсь простым пользователем. Если без макроса никак, то ничего, освою. Задача того требует.
Спасибо большое.
If Not Intersect(Target, Range("T7:T69:W7:W69")) Is Nothing Then
If IsNumeric(Target.Value) Then
Application.EnableEvents = False
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value
Application.EnableEvents = True
End If
End If
End Sub
Вот такая петрушка получилась , работает если цифры водить в ручную , но в данных ячейках T7:T69:W7:W69" , они обновляются по формуле с других формула простая =G2 . И когда обновляются они то макрос не складывает данные числа , если нажать на ячейку и потом энтер , после этого складывает , что можно и нужно подправить в данном коде.
Подскажите как реализовать макрос.
Необходимо только на текущем листе где 1000 строк (примерно) при нажатии на кнопку макроса
Все значения ячеек F добавить к значениям ячеек E через "; " (точка с запятой и пробел)
Я пробовал как описано в посте выше
у меня при начале работы над макросом ругается на строку
Target.Offset(0, 3).Value = Target.Offset(0, 3).Value & Target.Value
Подскажите как реализовать макрос!?
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Column = 1 Then
If IsNumeric(.Value) Then
Application.EnableEvents = False
.Offset(0, 1).Value = .Offset(0, 1).Value + .Value
Application.EnableEvents = True
End If
End If
End With
End Sub
Возможно ли так, что бы в столбце А в каждой ячейке тоже суммировались вводимые числа
Но вот в чем проблема, нет накопления при смене числа, если число меняется через команду "СЛУЧМЕЖДУ". Если я делаю один пересчет с помощью клавиши F9. Хотя казалось бы должно увеличиваться, можете мне в этом помочь?
Примеру в а столбце данные (В) суммирует затем допустим С столбец данные а столбец (D) cуммирует ?
Спасибо за помощь.
Подскажите пожалуйста, что нужно поменять в указанном макросе, если накопительными ячейками являются С4, С5, С6........и далее в столбик, а ячейками ввода данных Е4, Е5, Е6...и так же дальше в столбик.
Спасибо.