Excel: escalas de cores com gradação dupla

4

É possível fazer uma formatação condicional para duas escalas de cores graduadas sobre as mesmas células?

Por exemplo, desejo formatar condicionalmente uma célula de forma que sua cor seja: Escala graduada de verde para azul para valores de 0 a 10 e Vermelho para cor amarela graduada para valores de 10 a 20.

Se eu inserir duas regras de escala de 2 cores separadas, isso não funcionará, pois cada regra se aplica a todos os valores possíveis (você só pode especificar os pontos nos quais começa e finaliza a classificação - as cores inicial e final se aplicam) para todos os valores fora desses intervalos).

Eu desejo que as cores inicial e final não sejam aplicadas fora do intervalo de classificação, para que possam ser classificadas com uma regra subsequente.

Isso é possível?

    
por Mundi 10.10.2013 / 07:32

1 resposta

3

Tudo bem, fiquei meio enjoado com essa pergunta. Eu escrevi essa macro, classifica em ordem crescente, divide o intervalo não em branco no meio (arredondado para cima) e aplica duas escalas de cores. Modifique como quiser.

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
    
por 24.12.2013 / 12:29