如何摆脱图表中不需要的数据序列?

时间:2019-07-18 11:51:43

标签: excel vba

我正在使用vba绘制具有两个数据系列的图表。但是,在图表上它显示了三个图例。第三个图例对应于dataserie3,我没有将其添加到图表中,也不知道它来自何处。也没有与此数据序列相对应的数据。

所以我的第一个问题是,您是否知道为什么添加此图例以及该数据系列如何包含在图表中?我正在搜索此问题,发现这是一个常见问题。尽管所有建议只是删除该数据系列,但我看不到其背后的原因。

我的第二个问题是,vba中是否有任何命令(例如clc),全部清除,全部关闭... ...在运行代码之前清除所有数据,从而避免复制任何不需要的数据或转移到代码了吗?

Dim ws As Worksheet
Dim rng1X As Range, rng1Y As Range, rng2X As Range, rng2Y As Range
Dim objChrt As ChartObject
Dim chrt As Chart

Set ws = Sheets("Sheet2")
With ws
.Shapes.AddChart
Set objChrt = .ChartObjects(.ChartObjects.Count)
Set chrt = objChrt.Chart
With chrt
    .ChartType = xlXYScatterSmoothNoMarkers
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = rng1X
    .SeriesCollection(1).Values = rng1Y
    .SeriesCollection(1).Name = "Flow1"
    .SeriesCollection.NewSeries
    .SeriesCollection(2).XValues = rng2X
    .SeriesCollection(2).Values = rng2Y
    .SeriesCollection(2).Name = "Flow2"
    .HasLegend = True
    .Legend.Position = xlLegendPositionTop
    .Parent.Name = "Chart1"
End With

1 个答案:

答案 0 :(得分:1)

因此,每 次使用非连续数据制作聚簇柱形图时,都会遇到此问题。在测试中,使用连续数据对我而言并没有发生这种情况。如果我单步执行并检查图表本身的数据,当我输入XValues时,好像创建了一个数据系列。

我创建如下数据系列:

With ActiveChart
    .ChartType = xlColumnClustered
    .SeriesCollection.NewSeries
    .SeriesCollection(1).Name = " "
    .SeriesCollection(1).Values = "=Overview!$C$29,Overview!$C$32,Overview!$C$35,Overview!$C$38,Overview!$C$41"
     .SeriesCollection(1).XValues = "={"" ""}"
End With

我的解决方案是通过循环到我定义的数据序列之上(在这种情况下,> 1(i = .count to 2))来删除数据序列。

With ActiveChart
    If .SeriesCollection.Count > 1 Then
        For i = .SeriesCollection.Count To 2 Step -1
             .SeriesCollection(i).Delete
        Next
    End If
End With

编辑1:

将对来自多个数据序列的来源进行更好的解释(因为当我说在指定XValues时创建了一个数据序列时,我只考虑了另外的+1,但是存在2个以前是由于我的数据)。

创建图表时,我将创建为:

.Shapes.AddChart.Select

立即创建数据系列,使用的数据通常来自于工作表单元格A1中或基于当前活动单元格的连续数据。在我什至确定所需的图表类型之前(在我的情况下为xlColumnClustered),就会发生这种情况。

此时,您可以开始删除数据系列,尽管如果添加一个数据系列并指定.SeriesCollection(1),则始终只会影响第一个数据系列,而无论它是否是使用newseries创建的。 / p>

如果图表无法识别初始源数据系列,则会出现错误,因此最好添加.NewSeries并影响“(1)”系列,然后返回并稍后删除多余的部分

特定于我创建的图表,由于我的数据在电子表格中的显示方式,我.AddChart的那一刻就有两个数据系列。我创建了1个数据系列,并根据需要对其进行了处理,然后删除了多余的数据。