是否可以自动向一个 XY(散点图)添加更多系列?也许可以通过某些 VBA 来实现?问题是对于每个 x 和 y 我都有两个值。示例如下图所示。
当您有 500 个系列时,向一个图表组添加几个系列没有问题 - 但问题很大。如果有任何方法可以做到这一点,请告诉我。
答案1
请记住,每个图表最多有 255 个系列。如果您可以遵守该限制,这些程序将有所帮助。
要使用表中的数据创建新图表:
Sub InsertNewChart()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim cht As Chart
Set cht = ws.Shapes.AddChart2(XlChartType:=xlXYScatterLinesNoMarkers).Chart
cht.ChartArea.ClearContents
Dim iRow As Long
For iRow = 2 To ws.Range("A1").CurrentRegion.Rows.Count
With cht.SeriesCollection.NewSeries
.Name = "=" & ws.Cells(iRow, 2).Address(, , , True)
.Values = ws.Cells(iRow, 4).Resize(, 2)
.XValues = ws.Cells(iRow, 6).Resize(, 2)
End With
Next
End Sub
要将现有图表扩展一个系列,请使用图表中最后一个系列之后的行中的数据:
Sub ExtendChart()
Dim cht As Chart
Set cht = ActiveChart
Dim sFmla As String
sFmla = cht.SeriesCollection(cht.SeriesCollection.Count).Formula
sFmla = Mid$(Left$(sFmla, Len(sFmla) - 1), InStr(sFmla, "(") + 1)
Dim vFmla As Variant
vFmla = Split(sFmla, ",")
Dim rName As Range
Set rName = Range(vFmla(LBound(vFmla)))
Dim rXVals As Range
Set rXVals = Range(vFmla(LBound(vFmla) + 1))
Dim rYVals As Range
Set rYVals = Range(vFmla(LBound(vFmla) + 2))
With cht.SeriesCollection.NewSeries
.Name = "=" & rName.Offset(1).Address(, , , True)
.XValues = rXVals.Offset(1)
.Values = rYVals.Offset(1)
End With
End Sub
要按上述方法扩展图表,但每行添加一个系列,直到数据用完:
Sub KeepExtendingChart()
Dim cht As Chart
Set cht = ActiveChart
Do
Dim sFmla As String
sFmla = cht.SeriesCollection(cht.SeriesCollection.Count).Formula
sFmla = Mid$(Left$(sFmla, Len(sFmla) - 1), InStr(sFmla, "(") + 1)
Dim vFmla As Variant
vFmla = Split(sFmla, ",")
Dim rName As Range
Set rName = Range(vFmla(LBound(vFmla)))
If Len(rName.Offset(1).Value) = 0 Then Exit Do
Dim rXVals As Range
Set rXVals = Range(vFmla(LBound(vFmla) + 1))
Dim rYVals As Range
Set rYVals = Range(vFmla(LBound(vFmla) + 2))
With cht.SeriesCollection.NewSeries
.Name = "=" & rName.Offset(1).Address(, , , True)
.XValues = rXVals.Offset(1)
.Values = rYVals.Offset(1)
End With
Loop
End Sub
答案2
我以前也遇到过同样的问题,我现在正在做的事情如下:
在 P6 中制定您的计划,分配一个代码来指示每个活动的开始和结束位置。然后,当计划导出到 EXCEL 时,您将拥有所有开始日期和地点(第一个坐标)以及结束时间。
然后使用之前在 EXCEL 中排列的坐标导出并在 AUTOCAD 上自动绘图。
另一种方法是使用 Turbo Chart。