Страницы: 1
RSS
Подсветка ячейки, если в нее добавили значение выше, чем было
 
Всем привет.
Есть вопрос с надеждой на помощь.
Вопрос в следующем... возможно ли в екселе сделать подсветку ячейки в случае, если в нее добавили значение выше, чем было?
Приведу пример: есть ячейка, допустим А1 в которой написаны цифры - 10 - в идеале нужно, чтобы при написании в ячейке А1 допусти - 11 - она выделилась бы цветом или стала полужирной.
Заранее спасибо
 
Наберите в любом поисковике 'Условное форматирование в Excel'
Согласие есть продукт при полном непротивлении сторон
 
Sanja, УФ не поможет, т.к. оно не помнит что ранее было в ячейке. Только макросы событийные: выделение и изменение.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
http://www.excelworld.ru/forum/2-40271-1
Цитата
JayBhagavan написал:
Только макросы событийные: выделение и изменение.
ну достаточно просто хранения предыдущего значения, но без VBA не возможно - это факт.
Изменено: БМВ - 30.12.2018 08:39:39
По вопросам из тем форума, личку не читаю.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

vNew = Range("A1").Value
Application.EnableEvents = False
Application.Undo
vOld = Range("A1").Value
Range("A1").Value = vNew

    If vNew > vOld Then
        Range("A1").Interior.Color = 65535
    Else
        Range("A1").Interior.Pattern = xlNone
    End If
    
Application.EnableEvents = True
End Sub

 
VideoAlex, можно обойтись без vNew. Достаточно вместо:
Код
Range("A1").Value = vNew
записать:
Код
Application.Undo
ещё раз.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
 
Application.EnableEvents = False
Application.Undo
vOld = Range("A1").Value
Application.Undo
 
    If Range("A1").Value > vOld Then
        Range("A1").Interior.Color = 65535
    Else
        Range("A1").Interior.Pattern = xlNone
    End If
     
Application.EnableEvents = True
End Sub
 
А если значения вносится будут не точечно, а группой путем вставки?
По вопросам из тем форума, личку не читаю.
 
БМВ, у ТС написано:
Цитата
JARED написал: в идеале нужно, чтобы при написании в ячейке
Идеал достигается кодом от VideoAlex. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JARED написал:
возможно ли в екселе сделать подсветку ячейки в случае, если в нее добавили значение выше, чем было?
можно
допустим в ячейке было 1
пишем 1 млн. - подсветилось!! (как задумано 1 млн. больше чем 1)
тут же пишем 999999 - и все нормально! 999999 < 1000000 и даже цвет ячейки говорит, что внесено значение меньше предыдущего (хотя в начале было просто 1, а сейчас 999999)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Спасибо
 
понимаете,
один маневр и грош цена этому подсвечиванию, как способу информирования о чем-то
и даже если кто-то и не думал обмануть эту систему, а просто, по ошибке набрал 1 лишнюю цифру в числе, а потом увидел это и исправил

а вообще - компьютер это очень удобный инструмент, для контроля над действиями пользователя, особенно когда система контроля продумана и эффективна
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У меня задача сделать таблицу учета в котором указываются числами выполненные действия за сутки и по наступлении нового дня все продолжается. Так вот, для того чтобы было видно, какой пункт был выполнен за сегодня, а какой еще нет и все эти танцы с бубнами :) Просто хочется сделать как можно автономную таблицу. Я в екселе недавно и пытаюсь грызть РТФМ как могу
 
Ігор Гончаренко, Если человек задастся целью обмануть программу то он это сделает. Пока я не знаю ни одной программы которую нельзя было обмануть или сломать. Нюансы о которых вы говорите можно учитывать бесконечно и всё равно программа не будет идеальной. Можно взять любой код любого человека тут на форуме и предложить несколько вариантов действий пользователя при которых код не будет срабатывать. Теперь что, все это сообщество должно прекратить существование как непродуктивное?
 
VideoAlex, Игорь ведь не про обман программы говорит, а про вариант, когда ошибочно введено не то число. Почему Вы так болезненно реагируете? )
 
Цитата
VideoAlex написал:
Пока я не знаю ни одной программы которую нельзя было обмануть или сломать.
Дай дураку стеклянный орган, он его сломает и руки порежет. Стараться надо предусмотреть все, но если это невозможно, то самые регулярные ошибки блокировать обязательно.  Часть из них - это непродуманная логика работы. Например ошибка ввода, которая приведет к некорректной подсветке сейчас или на следующем шаге в рассматриваемом примере. Это не критика предложенного кода, а реальность в которой этот код будет использован.  Возможно просто кнопка "Take Snap Shot" и анализ значений относительно этого состояние будет более полезна, а исполнение много проще.
Изменено: БМВ - 31.12.2018 16:19:03
По вопросам из тем форума, личку не читаю.
 
VideoAlex,
я говорил о выбраном способе, а не о коде, извините, но код я просто не смотрел
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А я говорю о том что почти любой выбранный способ реализуется программно и программу можно обмануть.
Вверху уже предложили сравнивать значения вручную, точнее собственными силами без использования кода. Вот этот вариант не обманешь.
Еще вариант копировать куда-то в специально отведенное место значения перед изменением и потом формулой сравнивать нынешнее и прошлое значения.

Всех с новым годом, друзья ))
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
  
Application.EnableEvents = False
Application.Undo

vOld = Range("A1").Value
Application.Undo
  
    If Range("A1").Value > vOld Then
        Range("A1").Font.Color = RGB(255, 51, 4)
    Else
        Range("A1").Font.Color = RGB(93, 76, 71)
    End If
      
Application.EnableEvents = True
End Sub

Всем привет. Тема уже старая, понимаю, но актуальная на данный момент. Как этот скрипт заставить работать не только с ячейкой А1 а с диапазоном ячеек?
Изменено: Абитуриент - 05.11.2021 23:54:43
 
не тестировал, но может вот так

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A1:F100")) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    Dim vOld
    Application.EnableEvents = False
    Application.Undo
    vOld = Target.Value
    Application.Undo
    If Target.Value > vOld Then
        Target.Font.Color = vbRed 'RGB(255, 51, 4)
    Else
        Target.Font.ColorIndex = xlAutomatic 'RGB(93, 76, 71)
    End If
    Application.EnableEvents = True
End Sub
Изменено: New - 06.11.2021 01:25:43
 
New, попробую еще раз, выдавало ошибку
 
я там код обновил в своём сообщении, потестируйте
 
New,спасибо
 
Цитата
Абитуриент написал:
Как этот скрипт заставить работать не только с ячейкой А1 а с диапазоном ячеек
так и комментарий не свежий
Цитата
БМВ написал:
А если значения вносится будут не точечно, а группой путем вставки?
но тогда JayBhagavanотбил текущее решение  :-)
Ну и если использовать что-то подобное этому то можно контролировать любой диапазон.
Изменено: БМВ - 06.11.2021 08:13:44
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх