QUESTION: Can you please help me with transforming the VBA script below. Right now the script is applying conditional formatting to the cells in a specific range. I'd like to transform it and make it apply the conditional formatting on another range - for example if Cell B1=10, then Cell A1 to become red, if cell B2=2, then Cell A2 to become yellow. Here's the script i'm using:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim icolor As Integer Dim oCells As Range
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
aw z
Select Case Target
Case 1 To 5
icolor = 6
Case 6 To 10
icolor = 12
Case 11 To 15
icolor = 7
Case 16 To 20
icolor = 53
Case 21 To 25
icolor = 15
Case 26 To 30
icolor = 42
Case Else
'Whatever
End Select
Target.Interior.ColorIndex = icolor
End If
End Sub
ANSWER: Vladislav,
I have made the necessary adjustment in the code. You said if the target cell is 10, then the corresponding cell in column A would be red. However, for the Case 6 to 20 you color the cell a greenish color (icolor = 12). If you want it red, change the 12 to a 3 to color the cell Red.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim icolor As Integer Dim oCells As Range
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
Select Case Target
Case 1 To 5
icolor = 6
Case 6 To 10
icolor = 12
Case 11 To 15
icolor = 7
Case 16 To 20
icolor = 53
Case 21 To 25
icolor = 15
Case 26 To 30
icolor = 42
Case Else
'Whatever
End Select
' offset to the left 1 cell to color column A
' in the same row as the target cell
Target.Offset(0,-1).Interior.ColorIndex = icolor
End If
End Sub
---------- FOLLOW-UP ----------
QUESTION: I can do this very simple with the integrated conditional formatting, but since i'm using2003, i'm limitted to only 3 conditions and i need several more. Is it possible at all with the script i've sent, or i should try to make something more complex?
Vladislav
Vladislav,
You can nest your conditions
You cited ranges A1:C10 and D1:F10
I have put an embedded case statement in the cases of the existing case statement. It is just representative and you can modify it to fit your needs. I believe this an approach to the situation you describe.
Also, the event fires if the trigger cell is in either of A1:C10 or D1:F10
Private Sub Worksheet_Change(ByVal Target As Range)
Dim icolor As Integer Dim oCells As Range Dim r1 As Range, r2 As Range
' don't do anything if multiple cells triggered the event If Target.count > 1 then exit sub
If Not Intersect(Target, Range("A1:C10")) Is Nothing Then
Set r1 = Target ' cell in A1:C10 range
Set r2 = Target.Offset(0, 3) ' corresponding cell in D1:F10 range
ElseIf Not Intersect(Target, Range("D1:F10")) Is Nothing Then
Set r1 = Target.Offset(0, -3) ' cell in A1:C10 range
Set r2 = Target ' corresponding cell in D1:F10 range
Else
' Target is not in either of the ranges, so exit event
Exit Sub
End If
Select Case r1
Case 1 To 5
Select Case r2
Case 0 To 10
icolor = 6
Case 11 To 20
icolor = 7
Case 21 To 30
icolor = 8
End Select
Case 6 To 10
Select Case r2
Case 0 To 10
icolor = 9
Case 11 To 20
icolor = 10
Case 21 To 30
icolor = 11
End Select
Case 11 To 15
Select Case r2
Case 0 To 10
icolor = 12
Case 11 To 20
icolor = 13
Case 21 To 30
icolor = 14
End Select
Case 16 To 20
Select Case r2
Case 0 To 10
icolor = 15
Case 11 To 20
icolor = 16
Case 21 To 30
icolor = 17
End Select
Case 21 To 25
Select Case r2
Case 0 To 10
icolor = 18
Case 11 To 20
icolor = 19
Case 21 To 30
icolor = 20
End Select
Case 26 To 30
Select Case r2
Case 0 To 10
icolor = 21
Case 11 To 20
icolor = 22
Case 21 To 30
icolor = 23
End Select
Case Else
'Whatever
End Select
' set color in the first range
r1.Interior.ColorIndex = icolor
End Sub
Can you please help me with transforming the VBA script below. Right now the script is applying conditional formatting to the cells in a specific range. I'd like to transform it and make it apply the conditional formatting on another range - for example if Cell B1=10, then Cell A1 to become red, if cell B2=2, then Cell A2 to become yellow. Here's the script i'm using:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim icolor As Integer Dim oCells As Range
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then aw z
Select Case Target
Case 1 To 5
icolor = 6
Case 6 To 10
icolor = 12
Case 11 To 15
icolor = 7
Case 16 To 20
icolor = 53
Case 21 To 25
icolor = 15
Case 26 To 30
icolor = 42
Case Else
'Whatever
End Select
Target.Interior.ColorIndex = icolor
End If
End Sub
Vladislav
It seems like you have written your own program to conditionally change the interior color of a the target cell. You could possibly have done this with Excel's built in conditional formatting if you are using2007. Earlier versions were limited to 3 conditions, so maybe that is why you wrote your own. In any case, if you change a value in column B and you want the format in column A of the same row to change, subject to your Select Case options, I believe all you will need to do is change the last line to
Target.Offset(0,-1).ColorIndex=icolor
The following worked for me:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim icolor As Integer Dim oCells As Range
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub
Select Case Target.Value
Case 1 To 5
icolor = 6
Case 6 To 10
icolor = 12
Case 11 To 15
icolor = 7
Case 16 To 20
icolor = 53
Case 21 To 25
icolor = 15
Case 26 To 30
icolor = 42
Case Else
End Select
Target.Offset(0, -1).Interior.ColorIndex = icolor
End Sub
Advertisement