excel - 如何在折线图上创建 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
我需要循环的表:
期望的输出:
解决方案
您不能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
推荐阅读
- javascript - 尝试将 HTML 文件转换为包含套接字 io 的 JavaScript 时出现语法错误,SyntaxError: Unexpected token <
- if-statement - 使用 if-then-else 打印文件和目录并说明它是文件还是目录
- c++ - 如何将 `void *` 类型更改为 `string` 类型
- python - Flask 虚拟环境和环境变量
- json - 如何在akka-Http中返回JSON而不是Case Class
- batch-file - 如何使用批处理将日期和时间写入同一行的日志文件
- android - 将联系人图像添加到 MessagingStyle 通知“人员”
- css - 从 JSON 中提取的图像未显示在网格中
- java - 在 Java 中增加数组大小的同时向数组添加值
- jquery - 如何使用 jquery 在 ckeditor 中显示 JSON 响应值?