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



我正在使用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

因此,每次使用不连续的数据制作簇状柱形图时,我会遇到此问题。 在测试中,使用连续数据时,我没有发生这种情况。 如果我逐步检查图表本身的数据,则在我输入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:

将详细说明一个更好的解释,说明超过 1 个数据系列的来源(因为当我说在我指定XValues时创建了一个数据系列时,我只考虑了额外的 +1,但由于我的数据,以前存在 2 个)。

当我创建一个图表时,我创建这样的:

.Shapes.AddChart.Select

这将立即创建一个数据系列,使用来自工作表的单元格 A1 开始的连续数据的数据,或基于当前活动单元格的数据。 这发生在我确定我想要的图表类型之前(在我的例子中是 xlColumnClustered)。

此时可以开始删除数据系列,但如果添加数据序列并指定.SeriesCollection(1)则始终仅影响第一个数据系列,无论它是否是您使用 newseries 创建的那个......

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

具体到我正在创建的图表,由于我的数据在电子表格中的显示方式,我在.AddChart的瞬间有两个数据系列。 我创建 1 个数据系列并按照我想要的方式对其进行操作,然后删除多余的数据。

无需删除不需要的序列,您只需在创建图表之前选择任何空白单元格即可;

Sub test()
Dim Cell As Range
Dim UsedRng As Range
Set UsedRng = ActiveSheet.UsedRange
For Each Cell In UsedRng
If Cell.Value = Empty Then
Cell.Select
Exit For
End If
Next Cell
ActiveSheet.Shapes.AddChart.Select

End Sub

最新更新