【问题标题】:Excel Shift Chart Data Series Over 1Excel Shift Chart 数据系列超过 1
【发布时间】:2020-01-23 14:57:15
【问题描述】:

我有一个包含许多行的 Excel 图表,我希望将行的 y 值增加一列。

基本上将当前看起来像$A$4:$A$7 的范围更改为$B$4:B$7

通常,如果这是一个只有一条线的图表,选择该图表会将彩色框放在数据上,您可以简单地将它拖到一列上,但是如果有多条线(或系列),这些框不会显示而且我必须选择每个系列并输入一个新的数据范围,在同一个图上需要 10 条线,需要为数百个图完成,这有点问题。

我试图找到一个插件来改变“选择数据源”窗口的工作方式(因为它完全无法用于大型数据集)

我尝试在 VBA 中通过将系列的 y 范围设置为新范围来执行此操作,但 ActiveChart.SeriesCollection(n).Values = NewRange 一直给我一个“对象定义”错误。

我在这里有一个示例文件,其中显示了一个简单的多折线图,我希望将y 范围转移过来。

https://drive.google.com/file/d/1fbc5SoLDu0z4mG6A03gsHz_z8ANnFeHc/view?usp=sharing

谢谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    此代码获取活动图表,并将每个系列的系列名称和 Y 值向右移动一列:

    Sub MoveYright1column()
      With ActiveChart
        Dim srs As Series
        For Each srs In .SeriesCollection
          ' get series formula
          Dim sFmla As String
          sFmla = srs.Formula
          ' get arguments only
          sFmla = Mid$(Left(sFmla, Len(sFmla) - 1), InStr(sFmla, "(") + 1)
          ' split into array
          Dim vFmla As Variant
          vFmla = Split(sFmla, ",")
          ' Name address is 1st arg
          Dim sName As String
          sName = vFmla(LBound(vFmla))
          ' name range
          Dim rName As Range
          Set rName = Range(sName)
          ' offset one column
          Set rName = rName.Offset(, 1)
          srs.Name = "=" & rName.Address(, , , True)
          ' Y values address is 3rd arg
          Dim sYVals As String
          sYVals = vFmla(LBound(vFmla) + 2)
          ' Y values range
          Dim rYVals As Range
          Set rYVals = Range(sYVals)
          ' offset one column
          Set rYVals = rYVals.Offset(, 1)
          srs.Values = rYVals
        Next
      End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多