Private Sub Workbook_SheetChange( _
ByVal Sh As Object, _
ByVal Target As Range)
With Target.Item(1)
If IsNumeric(.Value) = True Then
Select Case .Value
Case Is <= 0: .Font.Color = RGB(0, 0, 255)
Case Is < 100: .Font.Color = RGB(255, 0, 0)
Case Is < 200: .Font.Color = RGB(130, 100, 0)
Case Is >= 200: .Font.Color = RGB(0, 255, 0)
End Select
End If
End With
End Sub
Нужна помощь(срочно)
Знающие люди помогите, пожалуйста. Нужно написать программу, которая меняет текст содержимого ячейки в excel, в зависимости от данных в этой ячейке.Например если в ячейке введено число меньше 100, то оно будет зелёного цвета, а если больше сотни, то красного. Цвет должен меняться сразу после вввода данных Заранее благодарен!!
Private Sub Worksheet_Change(ByVal Target As Range)
If Val(Target.Text) < 100 Then
Target.Interior.ColorIndex = 4
ElseIf Val(Target.Text) > 100 Then
Target.Interior.ColorIndex = 3
End If
End Sub
Вариант I.
Выделите нужную ячейку, например "A1", допускается выделение диапазона ячеек. Затем в меню Формат выберите команду Условное форматирование. В появившемся стандартном диалоговом в списке выберите формула, затем в поле введите =A1<100, после чего нажмите кнопку Формат, установите нужные параметры форматирования. В Вашем случае, это цвет шрифта - зелёный. После чего нажмите кнопку А также и повторите действия, только введите формулу =A1>100 и установите другие параметры форматирования (цвет шрифта - красный)
После чего нажмите кнопку OK.
Вариант II.
Выделите нужную ячейку/диапазона ячеек. Затем в меню Формат выберите команду Ячейки. В появившемся стандартном диалоговом в списке выберите закладку Число, затем в списке Числовые форматы выберите (все форматы. В поле Тип введите [Зеленый][<100]0,00;[Красный][>100]0,00;Основной
После чего нажмите кнопку OK.
Примечание : Формата 0,00 использован исключительно в ознакомительных целях и его конечно можно заменить, например на Основной
Что касается использования события Worksheet_Change, то здесь есть несколько "замечаний" :
- некорректность результата при вводе : 105 литров пива (красный), Иванов (зелёный)
- некорректность результата при вводе числовых значений >100, если выбран формат Денежный/Финансовый, содержащий $ (США)
- генерация ошибки вследствии копирования нескольких ячеек
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
If ActiveCell.Value <> "" Then
If ActiveCell.Value <= 0 Then
ActiveCell.Font.Color = RGB(0, 0, 255)
End If
If (ActiveCell.Value > 0) And (ActiveCell.Value < 100) Then
ActiveCell.Font.Color = RGB(255, 0, 0)
End If
If (ActiveCell.Value >= 100) And (ActiveCell.Value < 200) Then
ActiveCell.Font.Color = RGB(130, 100, 0)
End If
If (ActiveCell.Value = "") Or (ActiveCell.Value > 200) Then
ActiveCell.Font.Color = RGB(0, 255, 0)
End If
End If
End Sub
Код:
Private Sub Workbook_SheetChange( _
ByVal Sh As Object, _
ByVal Target As Range)
With Target.Item(1)
If IsEmpty(.Value) = False And _
IsNumeric(.Value) = True Then _
.Font.Color = Switch( _
.Value <= 0, RGB(0, 0, 255), _
.Value < 100, RGB(255, 0, 0), _
.Value < 200, RGB(130, 100, 0), _
.Value >= 200, RGB(0, 255, 0))
End With
End Sub
ByVal Sh As Object, _
ByVal Target As Range)
With Target.Item(1)
If IsEmpty(.Value) = False And _
IsNumeric(.Value) = True Then _
.Font.Color = Switch( _
.Value <= 0, RGB(0, 0, 255), _
.Value < 100, RGB(255, 0, 0), _
.Value < 200, RGB(130, 100, 0), _
.Value >= 200, RGB(0, 255, 0))
End With
End Sub
P.S. Возможно имеет смысл восстанавливать первоначальный цвет шрифта, например при удалении предыдущего значения или ввода нечислового значения … так как в этих случаях (на сегоднящний момент) цвет шрифта остаётся прежним. Также можно "запретить" изменение данных в более чем одной ячейке, например, ввод данных в несколько ячеек, копирование диапазона и т.п.