Как передать данные из массива непосредственно в диаграмму, минуя сводную таблицу? - VBA
Формулировка задачи:
Эти строчки передают данные по Х и У из диапазонов В7:Н7, В8:Н8 и затем на их основе строится диаграмма:
Но для этого нужно, чтобы в ячейках В7:Н7, В8:Н8 присутствовали соответствующие данные. Вопрос: как передать данные в диаграмму напрямую, минуя лист Excel? Например, у меня будут два массива X_Array(N), Y_Array(N), где N - заданное число. Все элементы этих массивов известны (определяются в ходе расчета). Но N может меняться, поэтому не хотелось бы заносить значения элементов массивов на лист Excel.
Вот полный код процедуры, если что:
Листинг программы
- .SeriesCollection(1).XValues = Sheets("Лист1").Range("B7:H7")
- .SeriesCollection(1).Values = Sheets("Лист1").Range("B8:H8")
Листинг программы
- Sub Diagr
- ActiveSheet.ChartObjects.Delete
- Application.ScreenUpdating = False
- Charts.Add
- ActiveChart.Location Where:=xlLocationAsObject, Name:="Расчет"
- With ActiveChart
- With .Parent
- .Top = Range("A10").Top
- .Left = Range("A10").Left
- .Height = 300
- .Width = 450
- End With
- .ChartType = xlLineMarkers
- .HasLegend = False
- '.SeriesCollection.Add Source:=ActiveSheet.Range("B8:H8")
- .SeriesCollection(1).XValues = Sheets("Лист1").Range("B7:H7")
- .SeriesCollection(1).Values = Sheets("Лист1").Range("B8:H8")
- ' Title
- .HasTitle = True
- .ChartTitle.Text = "= Лист1!R1C3"
- .ChartTitle.Font.Size = 10
- ' X axis
- .Axes(xlCategory, xlPrimary).HasTitle = True
- .Axes(xlCategory, xlPrimary).AxisTitle.Text = "= Лист1!R20C1"
- .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 10
- .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 10
- ' Y axis
- .Axes(xlValue, xlPrimary).HasTitle = True
- .Axes(xlValue, xlPrimary).AxisTitle.Text = "= Лист1!R21C1"
- .Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 10
- .Axes(xlValue, xlPrimary).TickLabels.Font.Size = 10
- .Deselect
- Application.ScreenUpdating = True
- End With
- End Sub
Решение задачи: «Как передать данные из массива непосредственно в диаграмму, минуя сводную таблицу?»
textual
Листинг программы
- Sub Diagr()
- If ActiveSheet.ChartObjects.Count Then ActiveSheet.ChartObjects.Delete
- Application.ScreenUpdating = False
- With ActiveSheet.ChartObjects.Add(Range("A10").Left, Range("A10").Top, 450, 300)
- With .Chart
- .ChartType = xlLineMarkers
- .HasLegend = False
- .SeriesCollection.Add Source:=Range("A1:A2") 'формально
- .SeriesCollection(1).XValues = Array("май", "июнь", "июль")
- .SeriesCollection(1).Values = Array(3, 5, 4)
- ' Title
- .HasTitle = True
- .ChartTitle.Text = "= Лист1!R1C3"
- .ChartTitle.Font.Size = 10
- ' X axis
- .Axes(xlCategory, xlPrimary).HasTitle = True
- .Axes(xlCategory, xlPrimary).AxisTitle.Text = "= Лист1!R20C1"
- .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 10
- .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 10
- ' Y axis
- .Axes(xlValue, xlPrimary).HasTitle = True
- .Axes(xlValue, xlPrimary).AxisTitle.Text = "= Лист1!R21C1"
- .Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 10
- .Axes(xlValue, xlPrimary).TickLabels.Font.Size = 10
- .Deselect
- Application.ScreenUpdating = True
- End With
- End With
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д