View Full Version : Colour cell dependent on condition
Attached : test_.xls
 
Hi,
Re: Colouring cell based on condition
 
Two sheets:
- Status : provides the condition for each person (holidays, etc)
- Snapshot : the report which requires updating via VBA or another means
 
Objective:
- The "snapshot" report in reality is quite long in the working version and takes considerable time to update each week manually. The sample provided has 5 activities.
- The "snapshot" report requires to be updated with the appropriate colours* from the "status" report.
 
* Happy for the colors to be changed in the solution.
 
Thanks in advance,
DE
Alternative method is to apply the colour from each person (see "Alternative" in "Status" sheet) as a painter method in the Snapshot sheet.
 
Unsure of VBA code to execute this. :dunno 
Any assistance would be appreciated. :hi:
Bob Phillips
07-20-2009, 06:48 AM
Sub UpdateSnapshot()
Dim LastRow As Long
Dim LastCol As Long
Dim RowNum As Long
Dim sh As Worksheet
Dim i As Long, j As Long
    
    Application.ScreenUpdating = False
    Set sh = Worksheets("Status")
    With Worksheets("Snapshot")
    
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        For i = 5 To LastRow
        
            LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column
            For j = 3 To LastCol
            
                On Error Resume Next
                RowNum = Application.Match(.Cells(i, j), sh.Columns(3), 0)
                On Error GoTo 0
                If RowNum > 0 Then
                
                    If sh.Cells(RowNum, "D").Value <> "" Then
                    
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "D").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "E").Value <> "" Then
                    
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "E").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "F").Value <> "" Then
                    
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "F").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "G").Value <> "" Then
                    
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "G").Interior.ColorIndex
                    Else
                        
                        .Cells(i, j).Interior.ColorIndex = xlColorIndexNone
                    End If
                End If
            Next j
        Next i
    End With
    
    Application.ScreenUpdating = True
End Sub
XLD,
 
Many thanks for the reply. I have tested the code on my live document.
I have only 1 issue to resolve as the code currently highlights the row outside my data range.
 
Question: Can you please provide a solution for limiting the range of the "Snapshot" sheet to 6 columns. 
 
Currently the code performs a count of the columns.
 
I'm unsure how to modify the code to fix to 6 columns.
 
DE
Bob Phillips
07-21-2009, 12:32 AM
I thought you said the real data was much greater.
Anyway, change
        For i = 5 To LastRow
to
        For i = 5 To 10
XLD,
 
Apologies. The data is much greater, however, in the row range (up to 2000 cells). The column range is fixed.
 
Many thanks again
 
DE
xld,
 
Your adjustment pertains to the row range rather than the column range as requested.
 
Still struggling to fix the column range from column C to column H
 
David
Bob Phillips
07-21-2009, 01:57 AM
Sub UpdateSnapshot()
    Dim LastRow As Long
    Dim LastCol As Long
    Dim RowNum As Long
    Dim sh As Worksheet
    Dim i As Long, j As Long
     
    Application.ScreenUpdating = False
     
    Set sh = Worksheets("Status")
    With Worksheets("Snapshot")
         
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
        For i = 5 To LastRow
             
            LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column
            If LastCol > 8 Then LastCol = 8
            For j = 3 To LastCol
                 
                On Error Resume Next
                RowNum = Application.Match(.Cells(i, j), sh.Columns(3), 0)
                On Error GoTo 0
                If RowNum > 0 Then
                     
                    If sh.Cells(RowNum, "D").Value <> "" Then
                         
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "D").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "E").Value <> "" Then
                         
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "E").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "F").Value <> "" Then
                         
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "F").Interior.ColorIndex
                    ElseIf sh.Cells(RowNum, "G").Value <> "" Then
                         
                        .Cells(i, j).Interior.ColorIndex = sh.Cells(3, "G").Interior.ColorIndex
                    Else
                         
                        .Cells(i, j).Interior.ColorIndex = xlColorIndexNone
                    End If
                End If
            Next j
        Next i
    End With
     
    Application.ScreenUpdating = True
End Sub
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.