Changing a cell color based on date entry ...

  • Thread starter Thread starter T. Denford
  • Start date Start date
T

T. Denford

Looking for solution to problem if anyone can help please ...

Column A contains a list of date values (e.g. 11/04/2005).

I'm looking for a way to change the cell color based on the following
criteria ...

If the date falls earlier than today but no earlier than a week before
today then cell color to be red.

If the date falls earlier than today but no earlier than two weeks before
today then cell color to be yellow.

If the date falls earlier than today but no earlier than three weeks before
today then cell color to be green.

I have used the sample code as detailed here ... http://tinyurl.com/3cex5
(kindly advised by Max in microsoft.public.excel) and need to tailor the
code to suit the different date ranges. Can anyone help out please as I'm
not sure how to build this is to the CASE statements.

Many thanks.
 
Hello -

Do you need macro code for that or could you use conditional
formatting?

For conditional formatting do the following:
- Select the cell
- Format > Conditional Formatting...
- Condition 1 > "Cell Value is" "less than" "=TODAY()-14
- Format... Button > Pattern Tab > Select Red
- Add >> Button ... for Condition 2
- Condition 2 > "Cell Value is" "less than" "=TODAY()-7
- Format... Button > Pattern Tab > Select Yellow
- Add >> Button ... for Condition 3
- Condition 3 > "Cell Value is" "less than" "=TODAY()
- Format... Button > Pattern Tab > Select Green

You can use the following VB code to add the conditional formatting to
the currently selected cell:

Range("K16").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()-14"
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()-7"
Selection.FormatConditions(2).Interior.ColorIndex = 6
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()"
Selection.FormatConditions(3).Interior.ColorIndex = 10
Selection.NumberFormat = "m/d/yyyy"

I think that would be the easiest way to do it if you want the color to
be updated upon entry. The other option would be to put code in the
Worksheet_Change() callback but that can get tricky too.

Joe
 
Hello -

Do you need macro code for that or could you use conditional
formatting?

For conditional formatting do the following:
- Select the cell
- Format > Conditional Formatting...
- Condition 1 > "Cell Value is" "less than" "=TODAY()-14
- Format... Button > Pattern Tab > Select Red
- Add >> Button ... for Condition 2
- Condition 2 > "Cell Value is" "less than" "=TODAY()-7
- Format... Button > Pattern Tab > Select Yellow
- Add >> Button ... for Condition 3
- Condition 3 > "Cell Value is" "less than" "=TODAY()
- Format... Button > Pattern Tab > Select Green

You can use the following VB code to add the conditional formatting to
the currently selected cell:

Range("K16").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()-14"
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()-7"
Selection.FormatConditions(2).Interior.ColorIndex = 6
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess,
_
Formula1:="=TODAY()"
Selection.FormatConditions(3).Interior.ColorIndex = 10
Selection.NumberFormat = "m/d/yyyy"

I think that would be the easiest way to do it if you want the color to
be updated upon entry. The other option would be to put code in the
Worksheet_Change() callback but that can get tricky too.

Joe

Hi Joe,

Yes I need VB code to do this as I need to build in more than 3 conditional
formats.
 
Hello T -

Here we go ... the following code applies the colors to the A1 Cell but
you can tweak it to work for a range or whatever you need ...

Private Sub Worksheet_Change(ByVal aTarget As Range)
If aTarget.Column = 1 And aTarget.Row = 1 Then
Set lTargetCell =
ThisWorkbook.Sheets("Sheet1").Cells(aTarget.Row, aTarget.Column)

If lTargetCell.Value < Date - 14 Then
lTargetCell.Interior.Color = vbRed
ElseIf lTargetCell.Value < Date - 7 Then
lTargetCell.Interior.Color = vbYellow
ElseIf lTargetCell.Value < Date Then
lTargetCell.Interior.Color = vbGreen
End If
End If
End Sub

Joe
 
Just to add -
After applying a constant to a cell colour format, Excel matches the colour
to the nearest that exists in the palette, then applies the colorindex
associated with the nearest matching colour. In other words, if the constant
as an RGB value does not exist in the palette the closest according to
Excel's (not very good) colour match algorithm is applied.

All the Enum constants given by Patrick do exist in Excel's Default palette,
and so will be matched exactly (assuming an uncustomized palette).

Some of these, but not the Pink & Brown, could be replaced by vb constants
that already exist, eg vbRed, vbYellow. vbBlue is not the same as Patrick's
Enum Blue, colorindex's 5 & 41 respectively.

I find it's somewhat slower to apply an RGB colour rather than a colorindex,
but unlikely to be noticed in such a routine.

Regards,
Peter T
 
colorindex as opposed to color may also produce odd results if the user is
playing with their color palette. for instance my nice pale grey heading
became a bright yellow on a colleagues machine !
 
colorindex as opposed to color may also produce odd results if the user is
playing with their color palette. for instance my nice pale grey heading
became a bright yellow on a colleagues machine !

I totally agree! I play with palettes a lot !!

Regards,
Peter T

 

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

Back
Top