【问题标题】:Creating a chart from multiple series with the same Y value从具有相同 Y 值的多个系列创建图表
【发布时间】:2015-07-30 04:33:21
【问题描述】:

我需要创建一个图表来显示不同人在一段时间内的报道。例如,一个没有标记的散点图显示一个系列,每个时间段都有人可用。每个人都有不同的 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

【问题讨论】:

    标签: vba excel dynamic charts series


    【解决方案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
    

    【讨论】:

    • 已编辑以显示数据样本。实际数据更加复杂,但是用这些简单的数字来解决我需要去的地方。谢谢鲍比。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2020-03-27
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多