4

Можно ли сделать условное форматирование для двух градуированных цветовых шкал над одними и теми же ячейками?

Например, я хочу условно отформатировать ячейку так, чтобы ее цвет был: шкала от зеленого до синего для значений от 0 до 10 и шкала от красного до желтого для значений от 10 до 20.

Если я введу два отдельных правила двухцветной шкалы, это не сработает, так как каждое правило применяется к каждому возможному значению (вы можете указать только точки, в которых начальная и конечная градация соответствует - начальный и конечный цвета применяются ко всем значениям вне этих диапазонов).

Я хочу, чтобы начальный и конечный цвета не применялись за пределами диапазона оценки, чтобы они могли быть оценены с последующим правилом.

Это возможно?

1 ответ1

3

Ладно, мне надоел этот вопрос. Я написал этот макрос, он сортирует по возрастанию, делит непустой диапазон пополам (округляется в большую сторону) и применяет две цветовые шкалы. Изменить, как вы хотите.

Sub TestColorScale()

Application.ScreenUpdating = False

'sort ascending
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A:A")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

'count cells
Dim intcount As Integer
Dim rngcount As Range
Set rngcount = Range("A:A")
intcount = Application.WorksheetFunction.CountA(rngcount)
rngcount.FormatConditions.Delete


'Get half
Dim inthalf As Integer
inthalf = intcount / 2
inthalf = Application.WorksheetFunction.RoundUp(inthalf, 0)


'Do first half
    Dim rng1 As Range
    Set rng1 = Range(Cells(1, 1), Cells(inthalf, 1))

   ' Add a 2-color scale.
    Dim cs1 As ColorScale
    Set cs1 = rng1.FormatConditions.AddColorScale(ColorScaleType:=2)

    ' Format the first color
    With cs1.ColorScaleCriteria(1)
        .Type = xlConditionValueLowestValue
        With .FormatColor
            .Color = vbGreen
            .TintAndShade = -0.25
        End With
    End With

    ' Format the second color
    With cs1.ColorScaleCriteria(2)
        .Type = xlConditionValueHighestValue
        With .FormatColor
            .Color = vbBlue
            .TintAndShade = 0
        End With
    End With

'Do second half
    Dim rng2 As Range
    Set rng2 = Range(Cells(inthalf + 1, 1), Cells(intcount, 1))
   ' Add a 2-color scale.
    Dim cs2 As ColorScale
    Set cs2 = rng2.FormatConditions.AddColorScale(ColorScaleType:=2)

    ' Format the third color
    With cs2.ColorScaleCriteria(1)
        .Type = xlConditionValueLowestValue
        With .FormatColor
            .Color = vbRed
            .TintAndShade = -0.25
        End With
    End With

    ' Format the fourth color
    With cs2.ColorScaleCriteria(2)
        .Type = xlConditionValueHighestValue
        With .FormatColor
            .Color = vbYellow
            .TintAndShade = 0
        End With
    End With

Application.ScreenUpdating = True

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .