powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Изменение цвета в зависимости от значения ячейки
25 сообщений из 35, страница 1 из 2
Изменение цвета в зависимости от значения ячейки
    #34584846
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток, уважаемые! ))
Есть у меня задача такая - в зависимости от значения в ячейке применить цвет к строке.. Код такой -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
i = ActiveCell.Interior.Color
 If Cells(Target.Row,  1 ).Value = "Выполнено" And i <>  65535  Or Cells(Target.Row,  1 ).Value = "Не утверждено" _
 And i <>  65535  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  6 
        .Pattern = xlSolid
    End With
 End If
 If Cells(Target.Row,  1 ).Value = "Открыто" And i <>  255  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  3 
        .Pattern = xlSolid
    End With
 End If
  If Cells(Target.Row,  1 ).Value = "Утверждено" And i <>  65280  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  4 
        .Pattern = xlSolid
    End With
 End If
   If Cells(Target.Row,  1 ).Value = "В работе" And i <>  16777215  Then
    Rows(Target.Row).Select
    Selection.Interior.ColorIndex = xlNone
 End If
End Sub

Вот, и проблема в том, что для того, что бы сработало, надо ввести значение (ну, или из списка выбрать), потом уйти с ячейки, а потом, что бы сработало, поставить курсор... Не подскажете ли, как можно сделать так, что бы эта штука срабатывала непосредственно после ввода? Т.е. что бы не надо было перещелкивать?
Заранее спасибо )
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34584924
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585085
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585100
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hashman VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...

Таки что? Строка уж вам и не ранг?
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585129
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladConn Hashman VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...

Таки что? Строка уж вам и не ранг?

)))
Попробовал, но чего-то все равно не получается.. Если сделать вот так:
Код: plaintext
1.
2.
3.
4.
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=""Выполнено"""
        Range(Cells(Target.Row,  1 ), Cells(Target.Row,  10 )).Select
    Selection.FormatConditions( 1 ).Interior.ColorIndex =  36 

То почему-то выделяет все равно одну ячейку - где слово написано.. Хотя selection идет на Range, и выделяется вся строка...
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585184
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, может, есть применительно к моему макросу какая-то штука, которая не на выделение ячейки срабатывает, а как On Edit, т.е. по завершении ввода? Может, есть что-нибудь в этом духе? Меня бы устроило, если бы еще какая добрая душа подсказала как это должно выглядеть )))))
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585199
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упрощу тему..

Как вместо
Код: plaintext
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Написать
Код: plaintext
Private Sub Worksheet_После_ввода_данных_в_ячейку(ByVal Target As Excel.Range)
... ТОгда, по идее, будет срабатывать, только вот что писать.. ?? А, помогите кто в курсе? :)
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585205
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал, но чего-то все равно не получается..
То почему-то выделяет все равно одну ячейку - где слово написано.. Хотя selection идет на Range, и выделяется вся строка...


Ну да, надо ведь, чтобы все ячейки строки получили необходимое значение для изменения формата...
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585215
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А впрочем:

Скопируйте этот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub CommandButton1_Click()
  CondFormat "5:5"
End Sub

Sub CondFormat(ByVal pstrRows As String)

    With Rows(pstrRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$B$1"
        .FormatConditions( 2 ).Interior.ColorIndex =  39 
    End With
    
End Sub

Нажмите на кнопку и вначале вбейте двойку в А1, а потом уберите ее и вбейте двойку в B1. Цвет всей строки 5 будет меняться.
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585238
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно уточнить кое какие вопросы? Я просто с таким кодом не сталкивался, мне не все понятно...
VladConnА впрочем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub CommandButton1_Click()
Т.е. сюда передать код строки, да?
End Sub
[/quot]
[SRC vba]
Sub CondFormat(ByVal pstrRows As String)
'А тут с полученными строками опрерировать, причем Formula(12345) - не адрес, 
'а возможное местоположение курсора, полученное из CommandButton1_Click, да? 
    With Rows(pstrRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$B$1"
        .FormatConditions( 2 ).Interior.ColorIndex =  39 
    End With
    
End Sub


И как бы мне сделать условие на 5 значений, где в они встречаются тока в одном столбце?
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585306
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. сюда передать код строки, да? - передать строковое представление адреса строки как аргумента процедуры CondFormat, но не сам по себе.

Что такое Formula(12345)? У меня нет параметризированной формулы Formula.

а возможное местоположение курсора, полученное из CommandButton1_Click, да? Нет. Событие Click не дает информации о возможном положении курсора. Последнее и не требуется.

Код: plaintext
И как бы мне сделать условие на  5  значений, где в они встречаются тока в одном столбце?
Для этих целей попробуйте включить макрорекордер.
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585326
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы знаете, на этом движке начинает получаться, на один вариант значения выглядит это дело вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim pstRows As String

pstRows = Target.Row-  1 
pstRows = pstRows + ":" + pstRows 
If Cells(Target.Row -  1 , Target.Column) = "41" Then
    With Rows(pstRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=R1C1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
    End With
End If
End Sub

Вот. Если на листе с этим макросом где нибудь вбить "41", то строка окрасится...
Но я столкнулся с рядом проблем:
Если нажать Enter и курсор уходит вниз, то все замечательно - я знаю, где введенное значение, но при любых других манипуляциях (таб, или просто клик где-нибудь) портят всю картину - и либо я ничего не определяю, либо ошибка...

Почему-то ячейка с самим значением цветом не выделяется. Хотя если ячейку очистить, то вся строка закрашивается... А иногда наоборот - сама ячейка окрашивается, а остальное нет...

Прошу прощения за беспокойство ))))
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585511
Диса
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HashmanДоброе время суток, уважаемые! ))
Есть у меня задача такая - в зависимости от значения в ячейке применить цвет к строке.. Код такой -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
i = ActiveCell.Interior.Color
 If Cells(Target.Row,  1 ).Value = "Выполнено" And i <>  65535  Or Cells(Target.Row,  1 ).Value = "Не утверждено" _
 And i <>  65535  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  6 
        .Pattern = xlSolid
    End With
 End If
 If Cells(Target.Row,  1 ).Value = "Открыто" And i <>  255  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  3 
        .Pattern = xlSolid
    End With
 End If
  If Cells(Target.Row,  1 ).Value = "Утверждено" And i <>  65280  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  4 
        .Pattern = xlSolid
    End With
 End If
   If Cells(Target.Row,  1 ).Value = "В работе" And i <>  16777215  Then
    Rows(Target.Row).Select
    Selection.Interior.ColorIndex = xlNone
 End If
End Sub

Вот, и проблема в том, что для того, что бы сработало, надо ввести значение (ну, или из списка выбрать), потом уйти с ячейки, а потом, что бы сработало, поставить курсор... Не подскажете ли, как можно сделать так, что бы эта штука срабатывала непосредственно после ввода? Т.е. что бы не надо было перещелкивать?
Заранее спасибо )

А имя события не пробовал поменять, например, на Calculate
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585616
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Изменена ячейка " & Target.Address
End Sub
тебе поможет
и ещё в Target будет передоваться не только одна ячейка при вводе, но массив ячеек при копировании, пробежаться по ним можно так
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    For Each rng In Target.Cells
        MsgBox "Изменена ячейка " & rng.Address
    Next
End Sub
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585629
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без VBA Условное форматирование тоже поможет
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585638
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor
Код: plaintext
1.
2.
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Изменена ячейка " & Target.Address
End Sub
тебе поможет


Спасибо, помогло! )))))

Огромное всем участникам СПАСИБИЩЕ! ))) Все работает при смене события, просто я не знал как это пишется .... )))))
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34585885
silveRain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имхо - это все изобретение велосипеда, когда можно обойтись стандартными средствами.

Как уже говорилось - выделяешь первую строку и делаешь условоное форматирование и три условия:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Condition  1 : 
Formula is: =OR($A1="Выполнено",$A1="Не утверждено")

Condition  2 : 
Formula is: =$A1="Открыто"

Condition  3 : 
Formula is: =$A1="Утверждено"

Соответственоо с форматом желтого, красного и зеленого цвета.
Копируешь первую строку, и выделив весь лист вставляешь специальной вставкой форматы - и всего делов. По крайней мере я бы сделал так.
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586059
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И как же применить форматы на всю строку, а не на только ячейку со значением? (О том, что там всего 3 варианта можно не упоминать, да? Т.е. понятно, что без редактора никак?) Притом, что
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
.....
pstRows = pstRows + ":" + pstRows 
If Cells(Target.Row -  1 , Target.Column) = "41" Then
    With Rows(pstRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=R1C1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
    End With
End If
....
(С) Спасибо VladConn
вот это работает, но немного не так, тогда как макрос в первом сообщении при измененной Worksheet_SelectionChange на Worksheet_Change (с)vkodor, выделяет всю строку и вообще все замечательно, и никаких ограничений на количество значений. Хотя, если есть возможность обойтись стандартными средствами, это только плюс, по-моему. Но в данном конкретном случае это невозможно, имхо...
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586079
silveRain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HashmanИ как же применить форматы на всю строку, а не на только ячейку со значением? (О том, что там всего 3 варианта можно не упоминать, да? Т.е. понятно, что без редактора никак?) Притом, что вот это работает, но немного не так, тогда как макрос в первом сообщении при измененной Worksheet_SelectionChange на Worksheet_Change (с)vkodor, выделяет всю строку и вообще все замечательно, и никаких ограничений на количество значений. Хотя, если есть возможность обойтись стандартными средствами, это только плюс, по-моему. Но в данном конкретном случае это невозможно, имхо...

Ну начнем с того, что в предложенном варианте задаче только три условия:
а) "выполнено" или "не утверждено" = цвет 6 (желтый)
б) "Открыто" = цвет 3 (красный)
в) "Утверждено" = цвет 4 (зеленый)
Значение "В работе", не имеющее цветового оформления, приравнивается к формату по умолчанию (можно считать это четвертым условием)

На всю строку очень замечательно ложится условное форматирование - просто выделите вначале строку целиком. А на остальные переносится при помощи AutoFill - with formatting only или специальной вставки на весь лист, как я уже говорил.

К сожалению, зарегистрироваться не могу, поэтому не могу приложить скрин.
Выложил сюда: http://image-upload.biz/files/14679a7425873a6b49090a006.jpg
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586084
silveRain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой ;) все-таки приложился, ну что ж, так даже удобнее! :)
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586179
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
silveRainОй ;) ... ну что ж, так даже удобнее! :)
Ага :) Вообще супер (Я правда, уже пошел похвастался, який я зыкий макрос написал, так что теперь исключительно теоретический интерес пошел ))))))
Но правда, почему-то с OR формула у меня не работает.. Я уже голову сломал - может, буквы не те, вместо
Код: plaintext
=OR($D2="Выполнено";$D2="Не утверждено")
поставил
Код: plaintext
=OR($D1="1";$D1="2")
... ни определяет и все тут...

Формулу сделал в отдельной ячейке (мало ли, с орфографией накосячил) - тот же результат - значения из этого поля не окрашиваются и все тут....
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586189
silveRain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hashman
Код: plaintext
=OR($D2="Выполнено";$D2="Не утверждено")
поставил
Код: plaintext
=OR($D1="1";$D1="2")
... ни определяет и все тут...

Ошибка в точке с запятой, по-моему - в качестве разделителя должна быть просто запятая
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586205
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
silveRain
Ошибка в точке с запятой, по-моему - в качестве разделителя должна быть просто запятая

Не-а.. у меня на запятую ругается... А точку с запятой поставил мастер формул (типа выберите значение ___ и ___ для формулы "ИЛИ")... А.. и я еще накосячил тут слегка - поставил формулы с разных строк, но на самом деле там такого нет ))))
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586222
Hashman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, все, отбой! ))) Если написать вот так =
Код: plaintext
=ИЛИ($D1= 1 ;$D1= 2 )
то работает )))
А если буквы, то вот так
Код: plaintext
=ИЛИ($D1="Ништяк";$D1= 2 )

Здорово! )))
...
Рейтинг: 0 / 0
Изменение цвета в зависимости от значения ячейки
    #34586227
Диса
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HashmanА, все, отбой! ))) Если написать вот так =
Код: plaintext
=ИЛИ($D1= 1 ;$D1= 2 )
то работает )))
А если буквы, то вот так
Код: plaintext
=ИЛИ($D1="Ништяк";$D1= 2 )

Здорово! )))

Можно совет?
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Изменение цвета в зависимости от значения ячейки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]