【问题标题】:Dynamic excel chart doesn't display all of the data动态excel图表不显示所有数据
【发布时间】:2014-09-09 02:53:35
【问题描述】:

我有这段代码允许用户在一些单元格中输入图表参数并动态创建图表。在两个垂直 (y) 轴和一个共享的水平 (x) 轴上允许多个系列(最多四个)。图表通常是列和线的混合,并且数据范围的长度不等。我有这样添加系列的代码(我会尽量坚持我认为相关的代码)

 seriesCount = 1
 If hasSeries1 = True Then
   ActiveChart.SeriesCollection.NewSeries
   ActiveChart.SeriesCollection(seriesCount).Name = .Cells(2, 6) & " " & axisside1
   ActiveChart.SeriesCollection(seriesCount).ChartType = chartType1
   ActiveChart.SeriesCollection(seriesCount).AxisGroup = axisgroup1
   ActiveChart.SeriesCollection(seriesCount).Border.LineStyle = borderStyle1
   ActiveChart.SeriesCollection(seriesCount).Border.Color = lineColor1
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Weight = lineWidth1
   ActiveChart.SeriesCollection(seriesCount).Format.Fill.ForeColor.RGB = seriesColor1
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Visible = hasLine1
   ActiveChart.SeriesCollection(seriesCount).XValues = dates1
   ActiveChart.SeriesCollection(seriesCount).Values = dataset1
   seriesCount = seriesCount + 1
 End If
 If hasSeries2 = True Then
   ActiveChart.SeriesCollection.NewSeries
   ActiveChart.SeriesCollection(seriesCount).Name = .Cells(3, 6) & " " & axisside2
   ActiveChart.SeriesCollection(seriesCount).ChartType = chartType2
   ActiveChart.SeriesCollection(seriesCount).AxisGroup = axisgroup2
   ActiveChart.SeriesCollection(seriesCount).Border.LineStyle = borderStyle2
   ActiveChart.SeriesCollection(seriesCount).Border.Color = lineColor2
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Weight = lineWidth2
   ActiveChart.SeriesCollection(seriesCount).Format.Fill.ForeColor.RGB = seriesColor2
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Visible = hasLine2
   ActiveChart.SeriesCollection(seriesCount).XValues = dates2
   ActiveChart.SeriesCollection(seriesCount).Values = dataset2
   seriesCount = seriesCount + 1
 End If
 If hasSeries3 = True Then
   ActiveChart.SeriesCollection.NewSeries
   ActiveChart.SeriesCollection(seriesCount).Name = .Cells(4, 6) & " " & axisside3
   ActiveChart.SeriesCollection(seriesCount).ChartType = chartType3
   ActiveChart.SeriesCollection(seriesCount).AxisGroup = axisgroup3
   ActiveChart.SeriesCollection(seriesCount).Border.LineStyle = borderStyle3
   ActiveChart.SeriesCollection(seriesCount).Border.Color = lineColor3
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Weight = lineWidth3
   ActiveChart.SeriesCollection(seriesCount).Format.Fill.ForeColor.RGB = seriesColor3
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Visible = hasLine3
   ActiveChart.SeriesCollection(seriesCount).XValues = dates3
   ActiveChart.SeriesCollection(seriesCount).Values = dataset3
   seriesCount = seriesCount + 1
 End If
 If hasSeries4 = True Then
   ActiveChart.SeriesCollection.NewSeries
   ActiveChart.SeriesCollection(seriesCount).Name = .Cells(5, 6) & " " & axisside4
   ActiveChart.SeriesCollection(seriesCount).ChartType = chartType4
   ActiveChart.SeriesCollection(seriesCount).AxisGroup = axisgroup4
   ActiveChart.SeriesCollection(seriesCount).Border.LineStyle = borderStyle4
   ActiveChart.SeriesCollection(seriesCount).Border.Color = lineColor4
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Weight = lineWidth4
   ActiveChart.SeriesCollection(seriesCount).Format.Fill.ForeColor.RGB = seriesColor4
   ActiveChart.SeriesCollection(seriesCount).Format.Line.Visible = hasLine4
   ActiveChart.SeriesCollection(seriesCount).XValues = dates4
   ActiveChart.SeriesCollection(seriesCount).Values = dataset4
 End If

问题是:图表只显示了它应该显示的部分数据。当我右键单击数据系列,点击 Select Data 并选择 Edit 时,正确的系列(x 和 y)会突出显示,但显示的是应该存在的截断子集。

这是我所看到的示例

这是浅蓝色列的一些数据

12/30/2005       307%
1/31/2006        302%
2/28/2006        248%
3/31/2006        262%
4/28/2006        285%
5/31/2006        256%
...              ...
...              ...
...              ...
6/30/2014        147%

请注意,从 2005 年 12 月 30 日开始,该数据应该如何显示在图表上,但它是从 2013 年 11 月 30 日开始的(尽管这些值似乎是正确的,307%、302% 等)。就好像 excel 强制第二个和第三个数据系列的长度与第一个相同。第一个是正确的图表。

【问题讨论】:

  • dataset1 到 dataset4 的值是多少?
  • @L42 它们是范围,可以是与相应 dates* 范围的长度相匹配的任何长度。
  • 图表以什么方式截断?发布图表的图像。图表轴的最大值是多少?它们是否涵盖了价值范围的全部范围?
  • 好的。但是他们是否返回了正确的目标范围。当您选择数据并进行编辑时,您期望的实际数据范围是否全部突出显示?
  • 刚刚看到您的编辑。我认为这与轴分配有关。

标签: excel excel-charts vba


【解决方案1】:

我认为您没有使用 XY 图表,因此您必须为每个系列使用相同的 标签(Xvalues = 日期)。这意味着您需要创建一个包含所有日期的唯一 日期-set 并将其(作为 Xvalues)分配给第一个系列。

【讨论】:

  • 你可能会在这里做一些事情。我正在对此进行调查,并会尽快回复您。
  • 看起来你一针见血。谢谢你。令我困扰的是,这似乎使我无法使用列或线。在图表方面,Excel 似乎并不是最灵活的。
猜你喜欢
  • 2017-06-02
  • 2017-11-12
  • 1970-01-01
  • 2015-12-15
  • 2014-01-08
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多