从具有相同Y值的多个系列创建图表

时间:2015-05-18 15:25:07

标签: vba excel-vba dynamic charts series

我需要创建一个图表,以显示不同人随着时间的推移。例如,没有标记的散点图显示某人可用的每个时间段的一个系列。每个人具有不同的Y值(例如,Joe = 1,Pat = 2,Kevin = 3)。目的是可视化时间为X轴的覆盖范围中的间隙。

我已经找到了如何通过...添加每个系列。

    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = “=Sheet1!$A$1:$B$1”
    ActiveChart.SeriesCollection(1).Values = “=Sheet1!$C$1:$D$1”
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).XValues = “=Sheet1!$A$2:$B$2”
    ActiveChart.SeriesCollection(2).Values = “=Sheet1!$C$2:$D$2”

......依此类推,但该代码是通过手动分配X和Y值生成的。

我需要做的是:

1)根据工作表上的行数动态引入(在图表上绘制)所有X和Y值(行数不会总是相同),并且

2)以相同的方式格式化具有相同Y值的所有系列(例如,Y = 2的所有系列都是红线,而Y = 1的所有系列都是蓝线)。

我想我可以使用循环使用i进行迭代/行号,直到有一个空单元格,但我在这种情况下无法完成这项工作。

下一步是能够在同一图表上添加多个工作表中的数据。我找到了一些像这样的代码......

    Dim ws As String
    For Each ws in ThisWorkbook

是否会从所有工作表中获取数据?

我想发布一个我想要做的事情的例子,但显然我需要先代表。这是一个链接。唯一的区别是我希望同一行上的所有内容都是相同的颜色(即图例中图例中只有2个对象)。 http://i280.photobucket.com/albums/kk185/navytoolmanshortfieldbreak/Graph%20Problem%201_zpszxpsgikn.jpg

更新:如果您无法访问照片,则会有4行4列数据。每行包含一个应绘制为水平线的系列。前两列是X坐标,而后两列是Y坐标。第一行显示从1,1到3,1的行,第二行显示从5,1到7,1等等。

    1    3    1    1
    5    7    1    1
    2    4    2    2
    7   10    2    2

1 个答案:

答案 0 :(得分:1)

1和2的答案)此代码将遍历您的数据,并按照您的描述进行绘制:

' Select Nothing so that Excel doesn't "help" by adding its own series
Range(Cells(ActiveSheet.UsedRange.Rows.Count + 1, ActiveSheet.UsedRange.Columns.Count + 1), _
      Cells(ActiveSheet.UsedRange.Rows.Count + 2, ActiveSheet.UsedRange.Columns.Count + 2)).Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select

' Add all of the desired series.
Row = 1
While Cells(Row, 1).Value <> ""
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.FullSeriesCollection(Row).Name = "Series" & Row
    ActiveChart.FullSeriesCollection(Row).XValues = "=Sheet1!$A$" & Row & ":$B$" & Row
    ActiveChart.FullSeriesCollection(Row).Values = "=Sheet1!$C$" & Row & ":$D$" & Row
    Row = Row + 1
Wend

作为非官方的答案3)此代码将遍历工作簿中的所有工作表:

Dim ws As Worksheet
For Each ws In ThisWorkbook
Next ws