Alterar a cor das series do gráfico dinamicamente - Exceldriven

Como alterar a cor das series do gráfico dinamicamente?

Neste novo artigo vou mostrar-te como podes como podes aplicar “formatação condicional” às colunas de um gráfico, no Microsoft Excel, alterando a sua cor conforme os valores da base de dados. Vamos lá?

A aplicação “formatação condicional” às colunas de um gráfico dinamicamente é bastante interessante. Este princípio permite adicionar mais detalhe ao objeto gráfico quando pretendemos que o mesmo seja dinâmico.

Contudo, como se trata de um objeto e não uma célula da folha de cálculo, não pode ser simplesmente formatado com formatação condicional. Já que a ferramenta se aplica a células e não objetos.

Neste sentido, como estamos a falar de uma propriedade de um objeto, o elemento “Série” do objeto gráfico, temos de recorrer a VBA para aplicar esta lógica de uma forma dinâmica.

Não percas aqui todo o processo detalhado, onde demonstro o código que pode ser aplicado a um programa (neste caso executado por um botão na folha de cálculo ou no friso), mas também pode ser aplicado a um evento, de folha, para ser completamente automatizado.

Se tiveres alguma dúvida, envia-nos a tua mensagem... ficamos à tua espera!


Faça aqui o download dos seus ficheiros de apoio!


Criar o gráfico e definir os elementos necessários

O gráfico será um gráfico tradicional de colunas, representando apenas uma serie (vendas) categorizada por meses.

Começamos então por selecionar os dados e acedemos ao menu Inserir [Insert] e no grupo dos gráficos escolhemos o gráfico de Colunas.

img_01.png

De seguida escolhemos os elementos necessários para o gráfico, dos quais vou definir as Etiquetas de Dados [Data Labels]. Retiro o eixo dos valores e as linhas de grelha.

img_02.png

Formato também a serie…

img_03.png

Para diminuir a largura do intervalo…

img_04.png

E o gráfico tem todos os elementos necessários.

img_05.png

Definir a macro que formata as colunas

Vamos então aceder ao Visual Basic Editor [VBE] através do menu Programador [Developer] e ao botão Visual Basic Editor.

img_06.png

No Visual Basic Editor começamos por criar um módulo que vai conter a nossa rotina.

img_07.png

Definir as variáveis para o gráfico

Começamos por definr as variáveis necessárias para o gráfico, que vão representar cada um dos objetos do gráfico que vamos manipular:

  • Variável. Gráfico: Representa e armazena o objeto (gráfico), neste caso o gráfico adicionado na folha.
  • Variável. Serie: Representa o objeto Serie do gráfico, que corresponde as colunas do gráfico.
  • Variável. Ponto: Representa o ponto da serie em específico quando selecionado para alterar a sua cor.
Sub FormatarSeries()

' Atribuir as variáveis

    Dim grafico As ChartObject

    Dim serie As Series

    Dim ponto As Point

    Dim dados as Range ' opcional para representar os valores do gráfico

Atribuir as variáveis aos objetos específicos

De seguida atribuímos as variáveis aos objetos. Especificamente a variável do gráfico, que irá então armazenar a informação do objeto (Gráfico) criado na folha.

Sub FormatarSeries()

' Atribuir as variáveis

    Dim grafico As ChartObject

    Dim serie As Series

    Dim ponto As Point

    Dim dados as Range ' opcional para representar os valores do gráfico

' Definir as varieis aos objetos

    Set dados = Range("C4", Range("C4").End(xlDown))

    Set grafico = Sheet1.ChartObjects(1)

Definir um ciclo em VBA

O próximo conjunto de instruções define um ciclo que percorre todas as series do gráfico, e um segundo ciclo que percorre todos os pontos da serie, analisando o seu valor para definir o formato a aplica (neste caso uma cor à coluna).

For Each serie In grafico.Chart.SeriesCollection

    For Each ponto In serie.Points

        ... expressões a executar colocadas aqui

    Next ponto

Next serie

Definir a condição a aplicar em cada ponto da serie

Neste caso vamos aplicar um teste lógico com a expressão IF para avaliar o valor que cada ponto da serie tem. Este valor é obtido através da Etiqueta de Dados [Data Label] e as condições serão as seguintes:

  1. Se o valor for superior ou igual a 20 000 €:
    1. Coluna formatada com a cor Verde
    2. Etiqueta de dados formatada com a Fonte a Verde
    3. Aplicação da Orientação da Etiqueta na vertical a 90º
  2. Se o valor for inferior ou igual a 10 000 €:
    1. Coluna formatada com o Vermelho
    2. Etiqueta de dados formatada com a Fonte a Vermelho
    3. Aplicação da Orientação da Etiqueta na vertical a 90º
  3. Caso não seja nenhuma das condições anteriores…
    1. Coluna formatada com o Azul
    2. Etiqueta de dados formatada com a Fonte a Azul
    3. Aplicação da Orientação da Etiqueta na vertical a 90º

Assim o código colocado dentro do ciclo de cada ponto é o seguinte:

If ponto.DataLabel.Text >= 20000 Then

    ponto.Format.Fill.ForeColor.RGB = RGB(0, 180, 0)    'Verde

    ponto.DataLabel.Font.Color = RGB(0, 180, 0)

    ponto.DataLabel.Orientation = 90

ElseIf ponto.DataLabel.Text <= 10000 Then

    ponto.Format.Fill.ForeColor.RGB = RGB(180, 0, 0)    'Vermelho

    ponto.DataLabel.Font.Color = RGB(180, 0, 0)

    ponto.DataLabel.Orientation = 90

Else

    ponto.Format.Fill.ForeColor.RGB = RGB(0, 0, 180)    'Azul

    ponto.DataLabel.Font.Color = RGB(0, 0, 180)

    ponto.DataLabel.Orientation = 90

End If

A versão completa do código:

Sub FormatarSeries()

    Dim grafico As ChartObject

    Dim serie As Series

    Dim ponto As Point

    Set grafico = Sheet1.ChartObjects(1)

    For Each serie In grafico.Chart.SeriesCollection

        For Each ponto In serie.Points

            If ponto.DataLabel.Text >= 20000 Then

                ponto.Format.Fill.ForeColor.RGB = RGB(0, 180, 0)    'Verde

                ponto.DataLabel.Font.Color = RGB(0, 180, 0)

                ponto.DataLabel.Orientation = 90

            ElseIf ponto.DataLabel.Text <= 10000 Then

                ponto.Format.Fill.ForeColor.RGB = RGB(180, 0, 0)    'Vermelho

                ponto.DataLabel.Font.Color = RGB(180, 0, 0)

                ponto.DataLabel.Orientation = 90

            Else

                ponto.Format.Fill.ForeColor.RGB = RGB(0, 0, 180)    'Azul

                ponto.DataLabel.Font.Color = RGB(0, 0, 180)

                ponto.DataLabel.Orientation = 90

            End If

        Next ponto

    Next serie

End Sub

Executar o código

O código pode ser executado com um botão que quando pressionado “atualiza” o gráfico para representar os dados.

img_08.png

Assim que criado o botão surge a caixa de diálogo para associar o botão à macro.

img_09.png

Para executar a Macro basta pressionar o botão…

img_10.png

img_11.png

Contudo neste caso a atualização do gráfico está dependente da “execução” da Macro. O próximo passo consiste em passar o código para um evento da aplicação, mais especificamente um evento da folha – Worksheet Change Event, que é acionado sempre que é alterada alguma célula na folha.

img_12.png

Colocando o código no procedimento o mesmo vai ser executado sempre que atualizado o valor em alguma célula da folha de cálculo. O código completo é apresentado a seguir:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim grafico As ChartObject

    Dim serie As Series

    Dim ponto As Point

    Set grafico = Sheet1.ChartObjects(1)   

    For Each serie In grafico.Chart.SeriesCollection   

        For Each ponto In serie.Points         

            If ponto.DataLabel.Text >= 20000 Then

                ponto.Format.Fill.ForeColor.RGB = RGB(0, 180, 0)    'Verde

                ponto.DataLabel.Font.Color = RGB(0, 180, 0)

                ponto.DataLabel.Orientation = 90

            ElseIf ponto.DataLabel.Text <= 10000 Then

                ponto.Format.Fill.ForeColor.RGB = RGB(180, 0, 0)    'Vermelho

                ponto.DataLabel.Font.Color = RGB(180, 0, 0)

                ponto.DataLabel.Orientation = 90

            Else

                ponto.Format.Fill.ForeColor.RGB = RGB(0, 0, 180)    'Azul

                ponto.DataLabel.Font.Color = RGB(0, 0, 180)

                ponto.DataLabel.Orientation = 90

            End If

        Next ponto

    Next serie

End Sub

Outros conteúdos relevantes:

Microsoft Excel: Como contar caracteres em células?

Microsoft Excel: Como contar caracteres em células?

Neste vídeo tutorial mostro como podes utilizar a função NÚM.CARAC [LEN] para contar caracteres e ocorrências em células no Microsoft Excel.

Continuar a ler...

Como criar Gráficos Sparkline, para mostrar tendências de valores?

Como criar Gráficos Sparkline, para mostrar tendências de valores?

Os Gráficos Sparkline ajudam qualquer utilizador a ter uma ideia resumida para analisar padrões em grandes volumes de dados...

Continuar a ler...

 

Pesquisar


Consulte aqui os últimos artigos publicados no nosso blog!

Aceda aqui ao nosso blog!


Consulte aqui os últimos vídeos publicados no nosso canal do Youtube!

Aceda aqui ao nosso arquivo!

Assista, ouça, pratique e aprenda!

Na nossa oferta, disponibilizamos cursos intensivos que lhe dão um conhecimento alargado dos programas, dependendo dos seus objetivos e nível de conhecimento. Para além disso, dispomos também de cursos on-demand que tem, entre outros aspetos, têm como principal objetivo ajudá-lo a resolver problemas específicos do dia-a-dia, sem ter necessidade de assistir a um curso completo.

Aprenda a maximizar o seu tempo e aumente a sua produtividade com a ferramenta mais utilizada em todo o mundo – o Microsoft Excel! Conheça a nossa oferta formação especializada e Ferramentas de Business Intelligence! Vamos lá?!

Microsoft Excel

Fique a conhecer as principais funcionalidades do Microsoft Excel, e ser autónomo no seu trabalho, temos um conjunto de cursos que o podem ajudar a chegar ao seu objetivo!

Veja aqui aos cursos disponíveis!

Business Intelligence

Passe ao próximo nível e conheça a nossa oferta de cursos especializados utilizando as potencialidades de Business Intelligence do Microsoft Excel, ou utilizando o Power Bi Desktop.

Veja aqui os cursos disponíveis!

VBA (Visual Basic for Applications)

Estenda as capacidades do Microsoft Excel, e controle quase a totalidade dos aspetos da aplicação, utilizando o VBA! Uma linguagem de programação à disposição de todos os utilizadores.

Veja aqui os cursos disponíveis!

Subscreva as nossas notícias e novidades!

Tem uma dúvida que gostava de ver esclarecida?

Contacte-nos através do seguinte formulário.

Pretendemos ajudá-lo a trabalhar, de forma eficiente, o Microsoft Excel e as Ferramentas Power Platform (Power BI, Power Apps e Power Automate).

O que pretendemos é que possa economizar tempo e aumentar a sua produtividade.

A nossa solução... uma oferta formativa de qualidade e em diversos modelos formativos, com conteúdos práticos, disruptivos e inovadores!

Consulte aqui todas as modalidades, ou contacte-nos para receber mais informações. Basta utilizar o formulário aqui disponível, ou o email geral@exceldriven.com. Até breve!

O que os nossos clientes dizem sobre nós?

Depoímentos

Excelente empresa a nível de formação. De realçar o formador Joao Teixeira, profissional 5 estrelas.
Bruno Matos -

Excelente apresentação e organização da Formação em Excel Avançado
Balbina Zambujo -

Boa tarde, Dou 5 estrelas pois o método de ensino é espetacular, as lições são muito bem sumarizadas, a interação entre o formador e o formando é eficaz possibilitando maior assimilação da matéria, e com o espaço para a resolução de exercícios tornam as aulas mais dinâmicas e proveitosas.
Yara Agostinho -

Excelente formação, com conteúdos didáticos e exercícios adaptados ao nível dos formandos. Recomendo!
Pramod Maugi -

Formação muito bem organizada e focada para as nossas necessidades. Recomendo.
Pedro Gomes -

Os conteúdos são muito bem explicados. As dúvidas dissipadas em curto espaço de tempo.
Rui Filipe -

Excelente instrutor, muito bons treinamentos e aquisição de conhecimentos.
Eunice Ramalho -

Tive uma formação de excel fundamental via zoom e, apesar das limitações apresentadas por ser uma formação online, foi ministrada com grande êxito, tendo tido pleno aproveitamento.
Patricia Martins -

O formador João Teixeira consegue tornar um assunto à partida monótono, em algo desafiante e cativante. Gostei imenso!
Maria Flores Macedo -