首页 > 解决方案 > 如何在折线图上创建 SetSourceData 循环

问题描述

我正在创建一个蒙特卡洛风格的模型来预测我公司的需求。该模型根据用户的要求运行多次(需要是动态的),并返回我们在给定年份可以预期制造的“批次”数量。我想绘制结果。

我想在图表上的每个模拟中包含一条线。但是,模拟的数量将根据用户从另一个名为“控制面板”的选项卡的输入而改变。

我试图创建一个动态“SetSourceData”的循环,但我没有成功。下面失败的代码。任何有关如何以这种方式选择非连续行的建议将不胜感激。

ThisWorkbook.Worksheets("Charts").Activate
NumberSimulations = ThisWorkbook.Sheets("Control Panel").Cells(28, 3)

ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLineMarkers
j = 0
For i = 1 To NumberSimulations
    ActiveChart.SetSourceData Source:=Sheets("Batches").Range(Cells(2 + j, 1), Cells(2 + j, 22))
    j = j + 7
Next i

我需要循环的表:
我需要循环的表

期望的输出:
期望的输出

标签: excelvba

解决方案


您不能SetSourceData增量使用 - 它为整个图表设置输入。像这样,你单独添加每个系列,会更好/更灵活:

Sub AddAChart()

    Dim co As ChartObject, cht As Chart, NumberSimulations As Long, i As Long
    Dim wsData As Worksheet

    Set wsData = ThisWorkbook.Worksheets("Batches")

    'add a new chart and clear any data which might have been added to it
    '  (eg if cells were selected when it was added)
    Set co = ThisWorkbook.Worksheets("Charts").ChartObjects.Add(100, 100, 300, 300)
    Set cht = co.Chart
    Do While cht.SeriesCollection.Count > 0
        cht.SeriesCollection(1).Delete
    Loop
    cht.ChartType = xlLineMarkers

    NumberSimulations = ThisWorkbook.Sheets("Control Panel").Cells(28, 3)

    For i = 1 To NumberSimulations
        'add this series
        With cht.SeriesCollection.NewSeries
            .XValues = wsData.Range("C1:V1")
            .Values = wsData.Range("C1:V1").Offset(1 + ((i - 1) * 7))
        End With
    Next i

End Sub

推荐阅读