Formate as cores do gráfico com base nos valores das séries

2

É possível formatar as cores de um gráfico de barras com uma única série com base em seus valores, ou seja, algo acima de 50 seria verde, abaixo seria vermelho?

Atualmente, o que tenho a fazer é uma solução alternativa:

Eu tenho meus dados para a série original e, em seguida, crio 2 subconjuntos. Um para vermelho, um para verde e use uma instrução if para extrair apenas valores acima de 50 para a série verde e abaixo de 50 para a série vermelha, depois plote ambas as séries, obviamente onde uma tem lacunas, a outra não.

Mas isso é chato, eu preferiria muito uma maneira fácil de definir um formato condicional na própria série.

Isso é possível?

PeterH
fonte

Respostas:

0

insira a descrição da imagem aqui

Digite o seguinte código VBA como módulo:

Sub FormatChartbyColour()

Set rRng = Selection


ColorIndex1 = 3
ColorIndex2 = 4



ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=rRng
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetElement (msoElementChartTitleAboveChart)


ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Name = "=""Colour 1"""
ActiveChart.SeriesCollection(2).Name = "=""Colour 2"""


ActiveChart.SeriesCollection(3).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(ColorIndex1)
ActiveChart.SeriesCollection(2).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(ColorIndex2)

With ActiveChart.Parent
    .Height = 250
    .Width = 250
    .Top = 100
    .Left = 100
End With

ActiveChart.Axes(xlCategory).TickLabels.Font.Size = 10
ActiveChart.Axes(xlCategory).TickLabels.Font.Bold = False
ActiveChart.Axes(xlCategory).TickLabels.Font.Italic = True
ActiveChart.ChartTitle.Text = "Chaert Title (Colour1:Red , Colour2:Green)"
ActiveChart.ChartTitle.Font.Size = 10


With ActiveChart
    vX = .SeriesCollection(1).XValues
    vY = .SeriesCollection(1).Values


    For thisvY = 1 To UBound(vY)
        If vY(thisvY) = 1 Then .SeriesCollection(2).Points(thisvY).Interior.ColorIndex = ColorIndex1
        If vY(thisvY) = 2 Then .SeriesCollection(2).Points(thisvY).Interior.ColorIndex = ColorIndex2

    Next thisvY

End With


End Sub

Como funciona:

  • Selecione intervalo de dados A23:C27.
  • Execute a macro.

Nota:

  • O índice de coluna é coluna auxiliar , você pode alterar Colors.
  • Tipo e tamanho do gráfico são editáveis.
  • Ajuste as referências de célula conforme necessário.
Rajesh S
fonte
Hey @Rajesh S, obrigado pela resposta, mas tendo 2 séries, uma para cada cor é o que eu já faço como solução. Eu estava procurando uma maneira de definir duas cores condicionalmente uma série única
PeterH
@ PeterH, acho que nesse caso você precisa de um gráfico de barras agrupadas ou, se possível, compartilhar alguns dados de amostra para que eu possa tentar também. Raj
Rajesh S