Conditional formating using VBA

R

RedDevil

Hello
I have to format cells (I4:J37) if cells (I43:J76) are:
100%-91% (green)
90%-76% (blue)
75%-50% (yellow)
<50% (red)

How do I write that in VBA? (I am new to VBA so any help would be appreciated)

Many thanks
Tracey
 
W

Wouter HM

Hi Tracey,

I asume your users will enter a value in the range("I43:J76").

In that case you case use the Worksheet_change(Byval Target as Range
function like so:

Private Sub Worksheet_Change(ByVal Target As Range)
' Check if only 1 cells value is changed
If Target.Cells.Count > 1 Then Exit Sub

' Check if changed cell has a value
If IsEmpty(Target) Then Exit Sub

' Check if changed cell has numeric value
If Not IsNumeric(Target.Value) Then
' Change font color
Target.Font.Color = vbRed
Exit Sub
Else
Target.Font.Color = vbBlack
End If
' Check if changed cell is specific given range
If Intersect(Target, Range("I43:J76")) Is Nothing Then Exit Sub

Select Case Target.Value
Case 0.91 To 1
Target.Offset(-37, 0).Interior.Color = vbGreen
Case 0.76 To 0.91
Target.Offset(-37, 0).Interior.Color = vbBlue
Case 0.5 To 0.76
Target.Offset(-37, 0).Interior.Color = vbYellow
Case Else
Target.Offset(-37, 0).Interior.Color = vbRed
End Select
End Sub


HTH,

Wouter
 
K

ker_01

Open the VBE, insert a new module, and paste in the code. Then select and run
it.

Note that this is not dynamic like true "conditional formatting"; e.g. if
the cell values change, the colors will not change until the macro is run
again.

HTH,
Keith

Sub UpdateColors()

For i = 1 To 34

RowToFormat = i + 3
RowOfData = i + 42
'Sheet1.Range("A1").Interior.Color

DataValue = Sheets("Sheet1").Range("I" & RowOfData).Value

Select Case DataValue
Case Is < 0.5
Sheets("Sheet1").Range("I" & RowToFormat).Interior.Color = vbRed
Case Is <= 0.75
Sheets("Sheet1").Range("I" & RowToFormat).Interior.Color =
vbYellow
Case Is <= 0.9
Sheets("Sheet1").Range("I" & RowToFormat).Interior.Color = vbBlue
Case Is <= 1
Sheets("Sheet1").Range("I" & RowToFormat).Interior.Color = vbGreen
Case Else
Sheets("Sheet1").Range("I" & RowToFormat).Interior.Color =
xlAutomatic
End Select

Next

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top