如何有条件地更改图表中的条形颜色(VBA)

时间:2018-09-08 15:29:36

标签: arrays excel vba for-loop

我想在3D条形图中绘制一系列现金流量。 我将图表的数据源设置为包含从0日元到7日元现金流量的单元格范围。

但是,我想根据现金流量是否为负来更改条形的颜色。

我当时正在考虑使用For Each循环和If / Else来做到这一点,但是我不知道如何引用每个柱的值。请帮忙。

我有现金流量,例如-1000、100、500、650、300、400、200 并且我有以下代码:

Dim j As Integer
Dim cell As Range
Dim flows As Range
Set flows = Worksheets("Data Input").Range("B2:B8")

For Each cell In flows
    For j = 1 To 7
        If cell.Value < 0 Then
            Worksheets("Output").ChartObjects("Chart 1").Activate
            ActiveChart.FullSeriesCollection(1).Select
            ActiveChart.FullSeriesCollection(1).Points(j).Select
            With Selection.Format.Fill
                .ForeColor.RGB = RGB(255, 0, 0)
            End With
        ElseIf cell.Value > 0 Then
            Worksheets("Output").ChartObjects("Chart 1").Activate
            ActiveChart.FullSeriesCollection(1).Select
            ActiveChart.FullSeriesCollection(1).Points(j).Select
            With Selection.Format.Fill
                .ForeColor.RGB = RGB(0, 255, 0)
            End With
        End If
    Next j
Next cell

应该发生的情况是,第一个条变为红色,因为现金流为负,其余的条应变为绿色。 代码可以运行,但条形仍默认为蓝色...

1 个答案:

答案 0 :(得分:0)

在“开发人员”选项卡中,只需“记录宏”并创建所需的条形图。格式化后,按“停止录制”,然后检查代码。这是最简单的开始方法。

让我们假设您记录了该宏。在录制过程中,寻找将红色条之一上的<0值着色为红色的点。

ActiveChart.FullSeriesCollection(1).Points(3).Select
With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.RGB = RGB(255, 0 0)
    .Transparency = 0
    .Solid
End With

该代码选择一个称为点的东西。因此,我们希望了解这意味着什么。

  

Visual Basic编辑器[F11]中的对象浏览器[F2]了解有关对象的其他详细信息。

在对象浏览器中查看时,它说点是对象的集合,并且是 Excel.Series 的成员(现在成为关注点)。浏览Series对象的其他成员,我们对 Values 进行了罚款...将这些知识放在一起:

Dim ws As Excel.Worksheet
Dim chart As Excel.chart
Dim series As Excel.series
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Output")
Set chart = ws.ChartObjects("Chart 1").chart
Set series = chart.FullSeriesCollection(1)

For i = 1 To series.Points.Count
    If (series.Values(i) < 0) Then
        chart.FullSeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
    End If
Next i