У меня есть данные за неопределенное количество лет в электронной таблице. Данные, которые я имею, выложены так, как на скриншоте imgur. В настоящее время у меня есть данные за 3 года (2016-2018), но я хочу, чтобы мой код мог работать неограниченное количество лет, так как я буду использовать его для наборов данных с любым количеством лет данных. Я хочу разбить эти данные на три графика в год: средний риск заболевания ####, средняя стоимость заболевания ####, средняя биометрия ####. Мне бы хотелось, чтобы эти графики отображались на той же электронной таблице, что и данные, выстроенные в три столбца и возрастающие по годам.
https://imgur.com/a/pO2ux7j
Код ниже только для графиков среднего риска заболевания ####.
Sub ChartMake()
Dim ChartCount As Integer
ChartCount = ActiveSheet.ChartObjects.Count
If ChartCount > 0 Then
ActiveSheet.ChartObjects.Delete
End If
Dim NLoops As Integer, LoopNumber As Integer
NLoops = Worksheets("Data Input").Range("Q2").Value - 1
LoopNumber = 1
Dim cht As ChartObject, rngChart As Range, destinationSheet As String, Results As Worksheet, StartRow As Integer, EndRow As Integer, StartChart As Integer, EndChart As Integer
Set Results = Worksheets("Results")
destinationSheet = ActiveSheet.Name
Do While NLoops >= 0
StartRow = NLoops * 27
EndRow = NLoops * 27 + 5
StartChart = NLoops * 9 + 9
EndChart = NLoops * 9 + 17
Set co = Sheets("Results").ChartObjects.Add(6, StartChart, 5, 8)
ActiveSheet.ChartObjects(1).Activate
ActiveChart.SetSourceData Source:=Results.Range(Results.Cells(StartRow, "A"), Results.Cells(EndRow, "B"))
ActiveChart.ChartType = xlColumnClustered
ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(72, 72, 72)
ActiveChart.Axes(xlCategory).TickLabels.Font.Color = RGB(72, 72, 72)
ActiveChart.Axes(xlValue).TickLabels.Font.Color = RGB(72, 72, 72)
ActiveChart.SeriesCollection(LoopNumber).Points(1).Interior.Color = RGB(59, 110, 172)
ActiveChart.SeriesCollection(LoopNumber).Points(2).Interior.Color = RGB(59, 110, 172)
ActiveChart.SeriesCollection(LoopNumber).Points(3).Interior.Color = RGB(59, 110, 172)
ActiveChart.SeriesCollection(LoopNumber).Points(4).Interior.Color = RGB(59, 110, 172)
ActiveChart.SeriesCollection(LoopNumber).Format.Shadow.Visible = msoTrue
Set cht = ActiveChart.Parent
With cht
.Left = Results.Cells(StartChart, "F").Left
.Top = Results.Cells(StartChart, "F").Top
.Height = Results.Range(Results.Cells(StartChart, "F"), Cells(EndChart, "J")).Height
.Width = Results.Range(Results.Cells(StartChart, "F"), Cells(EndChart, "J")).Width
End With
ActiveChart.Legend.Select
Selection.Delete
NLoops = NLoops - 1
LoopNumber = LoopNumber + 1
Loop
End Sub
Когда код зацикливается, он переназначает исходные данные на год следующего цикла и перемещается на место и на следующий год (график 2018 года фактически становится графиком 2017 года). Я предполагаю, что это связано с тем, как я создал диаграмму или объект диаграммы или использовал ActiveChart.
Как я могу вместо этого каждый раз создавать новый график? Я не знаю, как сделать новый объект диаграммы для каждого цикла бесконечно.