Aimi Tanada
Aimi Tanada

Reputation: 21

Excel VBA Loop Conditional Formatting by Each Row

I am trying to conditionally format for each row in a loop skipping every other row. It starts out by formatting range B8:Y8 using a color scale criteria in cell AD8. The next loop should format B10:Y10 using AD10, then B12:Y12 using AD12, etc. all the way to row 98. Here is the formatting code that will be inside the loop:

Range("B8:Y8").Select
Selection.FormatConditions.AddColorScale ColorScaleType:=2
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
    xlConditionValueNumber
Selection.FormatConditions(1).ColorScaleCriteria(1).Value = 0
With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
    .ThemeColor = xlThemeColorDark1
    .TintAndShade = 0
End With
Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
    xlConditionValueNumber
Selection.FormatConditions(1).ColorScaleCriteria(2).Value = "=$AD$8"
With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
    .ThemeColor = xlThemeColorAccent2
    .TintAndShade = 0
End With

Upvotes: 2

Views: 894

Answers (1)

user4039065
user4039065

Reputation:

It may be expedient to make the conditional formatting rule for B8:Y92 then delete the CFR from the odd rows.

Dim r As Long
With ActiveSheet
    With .Range("B8:Y92")
        .FormatConditions.Delete
        .FormatConditions.AddColorScale ColorScaleType:=2
        .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        .FormatConditions(1).ColorScaleCriteria(1).Type = _
            xlConditionValueNumber
        .FormatConditions(1).ColorScaleCriteria(1).Value = 0
        With .FormatConditions(1).ColorScaleCriteria(1).FormatColor
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        .FormatConditions(1).ColorScaleCriteria(2).Type = _
            xlConditionValueNumber
        .FormatConditions(1).ColorScaleCriteria(2).Value = "=$AD$8"
        With .FormatConditions(1).ColorScaleCriteria(2).FormatColor
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0
        End With
    End With
    For r = 9 To 91 Step 2
        .Range("B" & r & ":Y" & r).FormatConditions.Delete
    Next r
End With

See How to avoid using Select in Excel VBA macros.

Upvotes: 2

Related Questions