VBA для изменения диапазона значений Y / отдельных рядов на основе столбца для нескольких графиков - PullRequest
1 голос
/ 11 апреля 2019

Я довольно новичок в VBA. У меня есть 100+ диаграмм с несколькими рядами данных на одной вкладке в Excel. Чтобы создать их, я просто построил один график и вручную скопировал в каждый столбец. Каждая диаграмма одинакова, за исключением диапазона данных для одного (из четырех) рядов данных. Только для этих серий я хочу изменить значения YValues ​​для каждой диаграммы, чтобы они ссылались на следующий столбец (поэтому диапазон значений Y диаграммы1, например, A4: A100, диаграмма 2 - B4: B100, диаграмма 3 - C4: C100 и т. Д.) ,

Я думал о цикле для выбора каждого графика, выбора рассматриваемой серии и настройки диапазона Y.

Что-то вроде (не работает), где я бы увеличивал на 1 каждый раз, перемещая диапазон к следующему столбцу

ActiveChart.SeriesCollection(1).YValues = RangeRange(Cells(4, i), Cells(100, i))

Однако, это кажется возможным только для Xvalues ​​- не похоже, чтобы было эквивалентное свойство Yvalue.

ActiveChart.SeriesCollection (1) .XValues ​​= RangeRange (ячейки (4, i), ячейки (100, i))

Звучит просто, но искал в интернете повсюду и не мог найти, как редактировать определенный диапазон рядов данных на диаграмме, только весь диапазон данных диаграммы. Цени любую помощь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Мой окончательный код: создает любое количество диаграмм путем копирования шаблонной диаграммы, помещает новые диаграммы рядом друг с другом в строке, устанавливает новое название диаграммы на основе ссылки на столбец, настраивает диапазон для указанной серии диаграмм

Sub ChartGenerator()

Dim i As Integer
Dim cht As ChartObject
Dim dChart As Object
Dim NumCharts As Integer
Dim myRange As Range


Set myRange = ActiveSheet.Range("G3:DD3")

NumCharts = Application.WorksheetFunction.CountA(myRange)

For i = 1 To NumCharts

' copy template chart called "charttemplate"
 Set dChart = ActiveSheet.ChartObjects("charttemplate").Duplicate
 dChart.Select

' place it correctly
dChart.Top = ActiveSheet.ChartObjects("charttemplate").Top + ActiveSheet.ChartObjects("charttemplate").Height + 10
dChart.Left = (i - 1) * dChart.Width + ActiveSheet.ChartObjects("charttemplate").Left

' set chart title
dChart.Name = "newchart" & "" & i
dChart.Chart.HasTitle = True
dChart.Chart.ChartTitle.Text = "='" & ActiveSheet.Name & "'!R3C" & i + 6

' adjust series
ActiveChart.SeriesCollection(1).Values = Range(Cells(4, i + 6), Cells(10000, i + 6))

Next i

End Sub
0 голосов
/ 11 апреля 2019

вместо YValues, просто Values ...

      ActiveChart.SeriesCollection(1).Values = Range(Cells(4, i), Cells(100, i))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...