使用 Excel xy 散点图作为平衡调度线

使用 Excel xy 散点图作为平衡调度线

是否可以自动向一个 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。

相关内容