在Excel VBA中使系列跳过负值?

时间:2013-05-03 14:27:12

标签: excel vba excel-vba linegraph

截至目前,这段代码创建了3个图表。最后一张图有两个系列。第二个系列以负数开始,因此我将cht.Axes(xlValue).MinimumScale = 0放在下面代码的末尾,以使y轴无论如何都从零开始。唯一的问题是它使我的图形看起来混乱。我可以添加到现有代码中以使第二个系列跳过输入负数并从第一个0或正数开始吗?

 Sub UpdateCharts()
    Dim cObj As ChartObject
    Dim cht As Chart
    Dim shtName As String
    Dim chtName As String
    Dim xValRange As Range
    Dim lastRow As Long

    With ActiveSheet
        lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
        Set xValRange = .Range("B2:B" & lastRow)
        shtName = .Name & " "
    End With


    '## This sets values for Series 1 in each chart ##'
    For Each cObj In ActiveSheet.ChartObjects
        Set cht = cObj.Chart
        chtName = shtName & cht.Name

        If cht.SeriesCollection.Count = 0 Then
        '## Add a dummy series which will be replaced in the code below ##'
            With cht.SeriesCollection.NewSeries
                .Values = "{1,2,3}"
                .XValues = xValRange
            End With

        End If

        '## Assuming only one series per chart, we just reset the Values & XValues per chart ##'
        With cht.SeriesCollection(1)
        '## Assign the category/XValues ##'
            .Border.Color = RGB(0, 0, 255)
            .XValues = xValRange

        '## Here, we set the range to use for Values, based on the chart name: ##'
            Select Case Replace(chtName, shtName, vbNullString)
                 Case "RPM"
                      .Values = xValRange.Offset(0, 3) '## Column E is 3 offset from the xValRange in column B
                      .Name = "RPM"
                 Case "Pressure/psi"
                      .Values = xValRange.Offset(0, 5) '## Column G is 5 offset from the xValRange in column B
                      .Name = "Pressure/psi"
                 Case "Burn Off"
                    .Values = xValRange.Offset(0, 6)   '## Column H is 6 offset from the xValRange in column B
                    .Name = "Demand burn off"
                    '## Make sure this chart has 2 series, if not, add a dummy series ##'
                    If cht.SeriesCollection.Count < 2 Then
                        With cht.SeriesCollection.NewSeries
                            .XValues = "{1,2,3}"

                        End With
                    End If
                    '## add the data for second series: ##'
                    cht.SeriesCollection(2).XValues = xValRange
                    cht.SeriesCollection(2).Values = xValRange.Offset(0, 8)  '## Column J is 8 offset from the xValRange in column B
                    cht.SeriesCollection(2).Name = "Step Burn Off"
                    cht.SeriesCollection(2).Border.Color = RGB(255, 0, 0)

                 Case "Add as many of these Cases as you need"

            End Select

        End With
        cht.Axes(xlValue).MinimumScale = 0

    Next
    End Sub

这是图片: Burn off

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,一个非常简单的方法是选择具有负值的系列的条形或标记。

  

在图表中选择您的系列 - &gt;左键单击 - >格式系列,然后在第二个选项中选择“显示标记”,然后在线条颜色选项(第4个向下)中将线条设置为不可见。

以下是一个示例:Burner example

在Vba中,要玩的属性就像:

ChartObjects("Graphique 1").MarkerStyle = -4109
With Selection code
.MarkerStyle = 3
.MarkerSize = 10
End With