Stack Overflow em Português Asked by Three D.P on December 4, 2021
preciso fazer um gráfico em que as barras mudem de cor dependendo de seu valor!
exemplo: menor que mil vermelho, entre mil e dois mil amarelo e acima de mil verde segue imagem
Um código simples de ser utilizado é este, onde o gráfico deve ser selecionado e depois o código é executado:
Sub ColorByValue()
'https://peltiertech.com/vba-conditional-formatting-of-charts-by-value/
'http://www.clearlyandsimply.com/clearly_and_simply/2011/08/color-coded-bar-charts-with-microsoft-excel.html
Dim rPatterns As Range
Dim iPattern As Long
Dim vPatterns As Variant
Dim iPoint As Long
Dim vValues As Variant
Dim rValue As Range
Set rPatterns = ActiveSheet.Range("A1:A4")
vPatterns = rPatterns.Value
With ActiveChart.SeriesCollection(1)
vValues = .Values
For j = LBound(vValues) To UBound(vValues)
Debug.Print vValues(j)
Next j
For iPoint = 1 To UBound(vValues)
For iPattern = 1 To UBound(vPatterns)
If vValues(iPoint) <= vPatterns(iPattern, 1) Then
.Points(iPoint).Format.Fill.ForeColor.RGB = _
rPatterns.Cells(iPattern, 1).Interior.Color
Exit For
End If
Next
Next
End With
End Sub
Em que os valores de limite para colorir o gráfico são colocados na coluna A da planilha, exemplo: e esta parte do código alterada para o intervalo usado: Set rPatterns = ActiveSheet.Range("A1:A4")
Cada célula com o valor do limite deve possuir a cor do interior que deve ser usada.
E o resultado:
Se ocorrer algum erro, os dados devem possuir a coluna invertida:
+------+----+
| 2700 | 1 |
| 1100 | 2 |
| 3000 | 3 |
| 2100 | 4 |
| 3000 | 5 |
| 900 | 6 |
| 2900 | 7 |
| 600 | 8 |
| 300 | 9 |
| 1100 | 10 |
| 2000 | 11 |
| 2300 | 12 |
| 1700 | 13 |
| 2700 | 14 |
| 0 | 15 |
+------+----+
Ou esta parte do código mudada para: With ActiveChart.SeriesCollection(2)
Não é necessário utilizar o VBA para realizar isto, pode ser feito somente com fórmulas. Pois com VBA é um pouco mais complexo e isto é feito mais rapidamente e simples com as fórmulas.
Por exemplo, você possui esta tabela com valores:
+------+-------+
| A | B |
+------+-------+
| 1 | 2700 |
| 2 | 1100 |
| 3 | 3000 |
| 4 | 2100 |
| 5 | 3000 |
| 6 | 900 |
| 7 | 2900 |
| 8 | 600 |
| 9 | 300 |
| 10 | 1100 |
| 11 | 2000 |
| 12 | 2300 |
| 13 | 1700 |
| 14 | 2700 |
| 15 | 0 |
+------+-------+
E deseja três intervalos, um para cada cor:
Portanto, três colunas serão utilizadas ao lado dos valores da coluna B para verificar quais valores estão dentro destes intervalos e criar uma série de dados para cada coluna nova.
As formulas são as seguintes:
=SE(B2<1000;B2;"")
=SE(E(B2>=1000;B2<2000);B2;"")
=SE(B2>=2000;B2;"")
Em que se estiver dentro do intervalo, o valor é inserido na célula, caso contrário é deixado o valor em branco ""
.
Resultando na seguinte tabela:
+----+------+----------+---------+-------+
| A | B | Vermelho | Amarelo | Verde |
+----+------+----------+---------+-------+
| 1 | 2700 | | | 2700 |
| 2 | 1100 | | 1100 | |
| 3 | 3000 | | | 3000 |
| 4 | 2100 | | | 2100 |
| 5 | 3000 | | | 3000 |
| 6 | 900 | 900 | | |
| 7 | 2900 | | | 2900 |
| 8 | 600 | 600 | | |
| 9 | 300 | 300 | | |
| 10 | 1100 | | 1100 | |
| 11 | 2000 | | | 2000 |
| 12 | 2300 | | | 2300 |
| 13 | 1700 | | 1700 | |
| 14 | 2700 | | | 2700 |
| 15 | 0 | 0 | | |
+----+------+----------+---------+-------+
Com isto, um gráfico pode ser inserido em: Inserir > Gráfico Coluna Agrupada
e depois ir em Selecionar Dados
.
Cada coluna nova deverá ser adicionada como uma nova série de dados:
Os dados adicionados de cada série, são os valores de cada coluna:
Por fim, cada série de dados do gráfico deve ser selecionada e sua cor trocada:
Answered by danieltakeshi on December 4, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP