#excel #vba #charts
#excel #vba #Диаграммы
Вопрос:
Я довольно новичок в VBA. У меня более 100 диаграмм с несколькими рядами данных на одной вкладке в Excel. Чтобы создать их, я просто построил одну диаграмму и вручную скопировал в каждый столбец. Каждая диаграмма одинакова, за исключением диапазона данных для одного (из четырех) рядов данных. Только для этих рядов я хочу изменить значения Y для каждой диаграммы, чтобы ссылаться на следующий столбец (таким образом, диапазон значений диаграммы 1 Y равен, скажем, 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))
Звучит просто, но я искал в Интернете повсюду и не мог найти, как редактировать определенный диапазон рядов данных на диаграмме, только весь диапазон данных диаграммы. Ценю любую помощь.
Спасибо
Ответ №1:
вместо YValues
этого это просто Values
…
ActiveChart.SeriesCollection(1).Values = Range(Cells(4, i), Cells(100, i))
Комментарии:
1. Кроме того, это
Range
неRangeRange
так .2. Спасибо вам обоим. Это работает. Хотел поделиться своим окончательным кодом, но, похоже, он ограничен количеством символов в комментарии
Ответ №2:
Мой окончательный код: создает любое количество диаграмм путем копирования шаблона диаграммы размещает новые диаграммы рядом друг с другом в строке устанавливает новый заголовок диаграммы на основе ссылки на столбец настраивает диапазон для указанной серии диаграмм
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" amp; "" amp; i
dChart.Chart.HasTitle = True
dChart.Chart.ChartTitle.Text = "='" amp; ActiveSheet.Name amp; "'!R3C" amp; i 6
' adjust series
ActiveChart.SeriesCollection(1).Values = Range(Cells(4, i 6), Cells(10000, i 6))
Next i
End Sub