根据范围有条件地更改Excel VB中条形图中各个条的颜色

我正在处理一个Excel项目,并试图格式化条形图的颜色(以及后来的饼图),以便根据另一个数据范围显示REDGREENYELLOW 。 数据范围是…

Overview

范围E15:E36

这些值是百分比。 根据它们之间的百分比,我希望酒吧被格式化为绿色,红色或黄色。

如果在100 – 90之间,绿色如果在89 – 70之间,黄色如果在69 – 1之间,红色

下面是我的代码(条形图):

  Sub Macro2() ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36") ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36,B15:B36") ActiveChart.ApplyLayout (2) ActiveSheet.ChartObjects("Chart 3").Activate ActiveChart.Legend.Select Selection.Delete ActiveSheet.ChartObjects("Chart 3").Activate ActiveChart.ChartTitle.Select ActiveSheet.ChartObjects("Chart 3").Activate ActiveChart.ChartTitle.Text = "Rating Site Distribution" End Sub 

任何帮助将不胜感激! 我对VBA一点都不熟悉,觉得完全不符合我的要求。

另外,同样的function是否可以在饼图中使用相同的参数定义颜色?

预先感谢!!

这里是一个vba函数,我用它来反转负杠,所以它们是红色的。 也许这可以适应:

该函数在工作簿中的模块中的子例程中调用,如下所示:

 Sub FixTheGraph() FormatGraph("Overview") End Sub 

这是function。 您可以将其粘贴到子例程下面:

 Function FormatGraph(myWorksheet As String) Excel.Sheets(myWorksheet).Select Dim myChartObject As ChartObject For Each myChartObject In Excel.ActiveSheet.ChartObjects myChartObject.Select Dim myPoint As Integer, valArray With Excel.ActiveChart.SeriesCollection(1) valArray = .Values For myPoint = 1 To .Points.Count 'myVal = valArray(myPoint) Select Case valArray(myPoint) Case 0.9 To 1 With .Points(myPoint) .Interior.ColorIndex = 1 '<change colour to suit End With Case 0.7 To 0.9 With .Points(myPoint) .Interior.ColorIndex = 5 '<change colour to suit End With Case Is < 0.7 With .Points(myPoint) .Interior.ColorIndex = 3 End With End Select Next End With Next myChartObject Excel.Sheets(myWorksheet).Cells(1, 1).Select End Function 

你想要做的是一个图表typesxlBarStacked。 然后给它三个系列 – 每种颜色一个。

在每个系列中,如果元素值在范围内,则使用该值,否则将series.Value元素设置为0。

由于您的范围是互斥的,每个栏将只有一种颜色。