excel 如何去除图表中不需要的数据系列?

7xllpg7q  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(813)

我正在使用vba绘制一个有两个数据系列的图表。但是图表上显示了三个图例。第三个图例对应于dataserie3,我没有添加到图表中,我不知道它来自哪里。也没有数据对应于这个要绘制的数据系列。
所以我的第一个问题是,你知道为什么要添加这个图例吗?这个数据系列是如何包含在图表中的?我搜索了这个问题,发现这是一个常见的问题。虽然所有的建议都是简单地删除这个数据系列,但我看不到背后的原因。
我的第二个问题是,vba中是否有可用的命令,如clc,clear all,close all,...在运行代码之前清除所有数据,从而避免任何不需要的数据被复制或转移到代码中?

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
dfddblmv

dfddblmv1#

所以,每当我使用不连续的数据制作聚集柱形图时,我都会遇到这个问题。在测试中,使用连续数据时,我没有遇到这个问题。如果我单步执行,并检查图表本身的数据,它看起来像是在我输入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个以上数据序列的来源(因为我只考虑了额外的+1,当我说有一个数据序列创建时,我指定XValues,但2以前存在由于我的数据)。
当我创建图表时,我创建的是:

.Shapes.AddChart.Select

这会“立即”创建一个数据系列,使用的数据通常来自工作表单元格A1中开始的连续数据,或者基于当前的activecell。这甚至在我确定所需的图表类型(在我的例子中为xlColumnClustered)之前就发生了。
您可以在此时开始删除数据系列,但是如果您添加一个数据系列并指定.SeriesCollection(1),则将始终只影响第一个数据系列,无论它是否是您使用newseries...创建的数据系列。
如果图表无法识别初始源数据序列,您将得到一个错误,因此最好添加一个.NewSeries并影响“(1)”序列,然后返回并删除多余的序列。
具体到我正在创建的图表,由于我的数据在电子表格中的显示方式,我有两个数据序列,我创建了1个数据序列,并按照我想要的方式操作它,然后删除多余的。

whlutmcx

whlutmcx2#

而不是删除不需要的系列,您可以简单地选择任何空白单元格之前,创建图表
子测试()
变小单元格作为范围变小使用的范围作为范围
设置使用范围=活动工作表.使用范围
对于使用的每个单元格如果单元格.值=空,则为单元格.如果是下一个单元格,则选择结束
ActiveSheet.Shapes.AddChart.Select
末端子组件

相关问题