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

时间:2012-03-14 14:08:43

标签: excel vba excel-vba formatting conditional

我正在研究一个Excel项目,并尝试格式化条形图的颜色(后来通过相同的推理设置饼图)以显示REDGREEN或{ {1}}基于另一系列数据。数据范围是......

工作表YELLOW

范围Overview

这些值是百分比。根据它之间的百分比,我希望这些条形图为绿色,红色或黄色。

如果在100 - 90之间,格林 如果在89-70之间,黄色 如果在69 - 1之间,红色

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

E15:E36

任何帮助将不胜感激!我对VBA一点也不熟悉,并且觉得完全不符合我的要素......

此外,饼图的相同功能是否可以通过相同的参数定义颜色?

提前感谢!!

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:2)

您要做的是图表类型xlBarStacked。然后给它三个系列 - 每种颜色一个。

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

由于您的范围是互斥的,因此每个条形图只有一种颜色。