Как передать данные из массива непосредственно в диаграмму, минуя сводную таблицу? - VBA

Узнай цену своей работы

Формулировка задачи:

Эти строчки передают данные по Х и У из диапазонов В7:Н7, В8:Н8 и затем на их основе строится диаграмма:
Листинг программы
  1. .SeriesCollection(1).XValues = Sheets("Лист1").Range("B7:H7")
  2. .SeriesCollection(1).Values = Sheets("Лист1").Range("B8:H8")
Но для этого нужно, чтобы в ячейках В7:Н7, В8:Н8 присутствовали соответствующие данные. Вопрос: как передать данные в диаграмму напрямую, минуя лист Excel? Например, у меня будут два массива X_Array(N), Y_Array(N), где N - заданное число. Все элементы этих массивов известны (определяются в ходе расчета). Но N может меняться, поэтому не хотелось бы заносить значения элементов массивов на лист Excel. Вот полный код процедуры, если что:
Листинг программы
  1. Sub Diagr
  2. ActiveSheet.ChartObjects.Delete
  3. Application.ScreenUpdating = False
  4. Charts.Add
  5. ActiveChart.Location Where:=xlLocationAsObject, Name:="Расчет"
  6. With ActiveChart
  7. With .Parent
  8. .Top = Range("A10").Top
  9. .Left = Range("A10").Left
  10. .Height = 300
  11. .Width = 450
  12. End With
  13. .ChartType = xlLineMarkers
  14. .HasLegend = False
  15. '.SeriesCollection.Add Source:=ActiveSheet.Range("B8:H8")
  16. .SeriesCollection(1).XValues = Sheets("Лист1").Range("B7:H7")
  17. .SeriesCollection(1).Values = Sheets("Лист1").Range("B8:H8")
  18. ' Title
  19. .HasTitle = True
  20. .ChartTitle.Text = "= Лист1!R1C3"
  21. .ChartTitle.Font.Size = 10
  22. ' X axis
  23. .Axes(xlCategory, xlPrimary).HasTitle = True
  24. .Axes(xlCategory, xlPrimary).AxisTitle.Text = "= Лист1!R20C1"
  25. .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 10
  26. .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 10
  27. ' Y axis
  28. .Axes(xlValue, xlPrimary).HasTitle = True
  29. .Axes(xlValue, xlPrimary).AxisTitle.Text = "= Лист1!R21C1"
  30. .Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 10
  31. .Axes(xlValue, xlPrimary).TickLabels.Font.Size = 10
  32. .Deselect
  33. Application.ScreenUpdating = True
  34. End With
  35. End Sub

Решение задачи: «Как передать данные из массива непосредственно в диаграмму, минуя сводную таблицу?»

textual
Листинг программы
  1. Sub Diagr()
  2.   If ActiveSheet.ChartObjects.Count Then ActiveSheet.ChartObjects.Delete
  3.   Application.ScreenUpdating = False
  4.   With ActiveSheet.ChartObjects.Add(Range("A10").Left, Range("A10").Top, 450, 300)
  5.     With .Chart
  6.       .ChartType = xlLineMarkers
  7.       .HasLegend = False
  8.       .SeriesCollection.Add Source:=Range("A1:A2")  'формально
  9.      .SeriesCollection(1).XValues = Array("май", "июнь", "июль")
  10.       .SeriesCollection(1).Values = Array(3, 5, 4)
  11.  
  12.       ' Title
  13.      .HasTitle = True
  14.       .ChartTitle.Text = "= Лист1!R1C3"
  15.       .ChartTitle.Font.Size = 10
  16.       ' X axis
  17.      .Axes(xlCategory, xlPrimary).HasTitle = True
  18.       .Axes(xlCategory, xlPrimary).AxisTitle.Text = "= Лист1!R20C1"
  19.       .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 10
  20.       .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 10
  21.       ' Y axis
  22.      .Axes(xlValue, xlPrimary).HasTitle = True
  23.       .Axes(xlValue, xlPrimary).AxisTitle.Text = "= Лист1!R21C1"
  24.       .Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 10
  25.       .Axes(xlValue, xlPrimary).TickLabels.Font.Size = 10
  26.  
  27.       .Deselect
  28.       Application.ScreenUpdating = True
  29.     End With
  30.   End With
  31. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы