Excel VBA脚本,用于向图表动态添加系列

我正在尝试将多个系列动态添加到折线图中。我事先不知道有多少系列,所以它需要是动态的。我想到了但不起作用的是:

工作表ActiveSheet(或工作表(“数据”)包含从C14到Cend的行,其中包含从E14:Eend到R14:Rend的列,其中“end”标记由列C确定的最后一行数据。系列名称存储在第9行中。所有系列的X值都相同

我最大的问题是,我找不到一种方法来动态地将所有数据列作为序列添加到我的图表中,同时添加各自的名称。我不是VBA方面的专家,所以请善待我。我已经阅读了各种来源,并尝试了许多脚本,似乎没有一个工作。对象目录对我有点帮助,但我的问题仍然存在

子生成图()
将最后一列变长
最后一排一样长
作为整数的Dim i
将u定为整数
Dim NameRng作为字符串
变暗计数作为范围
Dim xRng As范围
LastColumn=ActiveSheet.Cells(8,Columns.Count).End(xlToLeft).Column
ColumnCount=LastColumn-4
LastRow=ActiveSheet.Range(“C”和ActiveSheet.Rows.Count).End(xlUp).Row
'Debug.Print(“最后一列:&LastColumn&Count:&ColumnCount&LastRow:&LastRow”)
图表。添加
使用活动图表
.ChartType=xlLineMarkers
.hasttle=正确
.ChartTitle.Text=“测试”
以
对于i=1到ColumnCount
u=i+4
NameRng=图纸(“数据”).范围(“R9:C”和u).值
设置xRng=图纸(“数据”)。范围(“R14:C3”、“R”和“LastRow”和“:C3”)
Set CountsRng=图纸(“数据”).范围(“R14:C”和u、“R”和LastRow&C”和u)
'Debug.Print('CountsRng:R14:C“&u&”,R“&LastRow&”:C“&u&NameRng:&NameRng:&xRng:R14:C3,R“&LastRow&”:C3”)
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(i).XValues=xRng
ActiveChart.SeriesCollection(i).Values=CountsRng
ActiveChart.SeriesCollection(i).Name=NameRng
接下来我
端接头

谢谢你的帮助。我解决了这个问题。我似乎完全弄乱了单元格范围的符号。你不能使用

设置xRng=Sheets(“数据”).范围(“R14:C3”、“R”和LastRow&C3”)

而是要用

设置xRng=.Range(.Cells(14,3),.Cells(LastRow,3))

此外,使用Charts.Add也没有多大帮助,因为Excel试图自动为所有系列找到正确的范围,并将它们相加,结果是一个完全混乱的图表。更好的方法是使用

设置ChartObj=ActiveSheet.ChartObjects.Add(左=20,宽=800,顶=20,高=500)

因为这将创建一个完全空的图形,您可以向其中添加自己的系列

以下是所有感兴趣的人的完整且有效的代码:

子生成图()
最后一排一样长
将最后一列变长
暗列与长列数相同
LastRow=ActiveSheet.Range(“C”和ActiveSheet.Rows.Count).End(xlUp).Row
LastColumn=ActiveSheet.Cells(8,Columns.Count).End(xlToLeft).Column
ColumnCount=LastColumn-4
Debug.Print(“最后一列:”&LastColumn&“计数:&ColumnCount&“LastRow:&LastRow”)
将图表设置为工作表
设置wsChart=图纸(1)
wsChart.Activate
将ChartObj变暗为ChartObject
设置ChartObj=ActiveSheet.ChartObjects.Add(左=20,宽=800,顶=20,高=500)
ChartObj.chart.ChartType=xlLineMarkers
作为整数的Dim i
将u定为整数
Dim NameRng作为字符串
Dim xRng As范围
变暗计数作为范围
对于i=1到ColumnCount
u=i+4
带图纸(“数据”)
NameRng=.Cells(9,u).Value
Set CountsRng=.Range(.Cells(14,u),.Cells(LastRow,u))
设置xRng=.Range(.Cells(14,3),.Cells(LastRow,3))
Debug.Print“-”和;i&“——”&u&"--"
调试。打印“x范围:”&xRng.地址
调试。打印“名称范围:”&amp。单元(9,u)。地址
调试。打印“值范围:”&地址
以
'设置ChartSeries=ChartObj.chart.SeriesCollection.NewSeries
'使用ActiveChart.SeriesCollection.NewSeries
使用ChartObj.chart.SeriesCollection.NewSeries
.XValues=xRng
.Values=CountsRng
.Name=NameRng
以
'设置xRng=Nothing
'Set CountsRng=无
'NameRng=“”
接下来我
“ChartObj
用ChartObj
.SetElement(MSoElementLegendBooth)
.轴(xlValue).MajorUnit=1
.Axes(xlValue).MinorUnit=0.5
.Axes(xlValue).MinorTickMark=xlout
“.Axes(xlCategory).TickLabels.NumberFormat=“#,###000”
.Axes(xlCategory).TickLabels.NumberFormat=“#,##0”
“.位置,其中:=xlLocationAsObject,名称:=“绘图”
以
端接头

发表评论