Страницы: 1
RSS
Суммирование с нарастанием при добавлении данных
 
Здравствуйте, есть некая табличка в которую могут вводится значения только " +1,2,3,4,5 " или "-1,2,3,4,5", отображаться числа должны обязательно со знаком "+" или "-"
данные могут несколько раз добавляться (не более 6 раз), при вводе нового значения оно должно не затирать старое а суммироваться со старым значением и отображаться уже итоговое значение, пределы отображаемого значения могут быть в диапазоне от -30 до +30, при выходе за данный предел нужно как-то выделить/подсветить/закрасить ячейку
Это похоже на суммирование нарастающим итогом в самой ячейке куда вводят очередное значение
Из всего я смог только получить только отображение положительных и отрицательных значений с помощью формата "+##;-##;0;"как возможно это реализовать?
 
edkudin,
закрасить ячейку можно через условное форматирование, так будет проще

Суммирование с предыдущим значением можно сделать макросом. Если будете удалять значение, то вместо суммы будет пусто
Код
Dim zapas
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
zapas = Target.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub

Application.EnableEvents = False
было = zapas
Application.EnableEvents = True

стало = Target

Application.EnableEvents = False
If Target = "" Then
Target = ""
Else
Target = было + стало
End If
Application.EnableEvents = True
End Sub
Изменено: evgeniygeo - 28.04.2021 06:11:33
 
Спасибо, работает!
Про условное форматирование я как-то упустил...
А вот можете подсказать в вашем коде как мне расширить диапазон таблицы, к примеру в оригинальном файле она будет 35х35 ячеек с С3 по АК37
 
edkudin,
я вообще не ограничивал диапазон, т.е. код работает на всем листе.
Но нужно проверить, не вводите ли Вы что-то помимо этих данных.

Можно ограничить вот так:
Код
If Not Intersect(Target, Range("G4:S22")) Is Nothing Then
Код
Dim zapas
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
zapas = Target.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("G4:S22")) Is Nothing Then
Application.EnableEvents = False
было = zapas
Application.EnableEvents = True

стало = Target

Application.EnableEvents = False
If Target = "" Then
Target = ""
Else
Target = было + стало
End If
Application.EnableEvents = True

End If
End Sub
Изменено: evgeniygeo - 28.04.2021 06:29:39
 
ага, так и есть... тогда перефразирую вопрос, как ограничить диапазон работы этого макроса указанными выше рамками?
пока набирал вы уже ответили, спасибо сейчас потестирую!

Спасибо огромное, всё работает!
Изменено: edkudin - 28.04.2021 08:59:27
Страницы: 1
Наверх