Серия данных Excel Shift Chart более 1 - PullRequest
0 голосов
/ 23 января 2020

У меня есть диаграмма Excel с множеством линий, и я буду sh увеличивать значения y строк на один столбец.

Существенно изменив диапазон, который в настоящее время выглядит как $A$4:$A$7 на $B$4:B$7 .

Обычно, если это была диаграмма с одной линией, при выборе диаграммы можно поместить цветные прямоугольники над данными, и вы можете просто перетащить ее на один столбец, однако с несколькими строками (или рядами) эти поля не не появится, и мне нужно будет выбрать каждую серию и ввести новый диапазон данных, который с 10 строками на одном графике, который необходимо выполнить для сотен графиков, немного проблематичен c.

Я попытался найти дополнение, которое меняет работу окна «Выбор источника данных» (поскольку оно совершенно непригодно для больших наборов данных)

Я попытался сделать это в VBA, установив серию 'y диапазон до нового диапазона, но ActiveChart.SeriesCollection(n).Values = NewRange продолжал выдавать мне ошибку "объект определен".

У меня есть файл примера, показывающий простую многострочную диаграмму, которую я sh для смещения диапазонов y.

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

Спасибо

1 Ответ

0 голосов
/ 24 января 2020

Этот код берет активную диаграмму и перемещает имя серии и значения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...