Программное создание графика (диаграммы) в VBA Excel с помощью метода Charts.Add на основе данных из диапазона ячеек на рабочем листе. Примеры.
Метод Charts.Add
В настоящее время на сайте разработчиков описывается метод Charts.Add2, который, очевидно, заменил метод Charts.Add. Тесты показали, что Charts.Add продолжает работать в новых версиях VBA Excel, поэтому в примерах используется именно он.
Синтаксис
1 |
Charts.Add ([Before], [After], [Count]) |
1 |
Charts.Add2 ([Before], [After], [Count], [NewLayout]) |
Параметры
Параметры методов Charts.Add и Charts.Add2:
Параметр | Описание |
---|---|
Before | Имя листа, перед которым добавляется новый лист с диаграммой. Необязательный параметр. |
After | Имя листа, после которого добавляется новый лист с диаграммой. Необязательный параметр. |
Count | Количество добавляемых листов с диаграммой. Значение по умолчанию – 1. Необязательный параметр. |
NewLayout | Если NewLayout имеет значение True, диаграмма вставляется с использованием новых правил динамического форматирования (заголовок имеет значение «включено», а условные обозначения – только при наличии нескольких рядов). Необязательный параметр. |
Если параметры Before и After опущены, новый лист с диаграммой вставляется перед активным листом.
Примеры
Таблицы
В качестве источников данных для примеров используются следующие таблицы:
Пример 1
Программное создание объекта Chart с типом графика по умолчанию и по исходным данным из диапазона «A2:B26»:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Primer1() Dim myChart As Chart 'создаем объект Chart с расположением нового листа по умолчанию Set myChart = ThisWorkbook.Charts.Add With myChart 'назначаем объекту Chart источник данных .SetSourceData (Sheets("Лист1").Range("A2:B26")) 'переносим диаграмму на "Лист1" (отдельный лист диаграммы удаляется) .Location xlLocationAsObject, "Лист1" End With End Sub |
Результат работы кода VBA Excel из первого примера:
Пример 2
Программное создание объекта Chart с двумя линейными графиками по исходным данным из диапазона «A2:C26»:
1 2 3 4 5 6 7 8 9 10 |
Sub Primer2() Dim myChart As Chart Set myChart = ThisWorkbook.Charts.Add With myChart .SetSourceData (Sheets("Лист1").Range("A2:C26")) 'задаем тип диаграммы (линейный график с маркерами) .ChartType = xlLineMarkers .Location xlLocationAsObject, "Лист1" End With End Sub |
Результат работы кода VBA Excel из второго примера:
Пример 3
Программное создание объекта Chart с круговой диаграммой, разделенной на сектора, по исходным данным из диапазона «E2:F7»:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer3() Dim myChart As Chart Set myChart = ThisWorkbook.Charts.Add With myChart .SetSourceData (Sheets("Лист1").Range("E2:F7")) 'задаем тип диаграммы (пирог - круг, разделенный на сектора) .ChartType = xlPie 'задаем стиль диаграммы (с отображением процентов) .ChartStyle = 261 .Location xlLocationAsObject, "Лист1" End With End Sub |
Результат работы кода VBA Excel из третьего примера:
Примечание
В примерах использовались следующие методы и свойства объекта Chart:
Компонент | Описание |
---|---|
Метод SetSourceData | Задает диапазон исходных данных для диаграммы. |
Метод Location | Перемещает диаграмму в заданное расположение (новый лист, существующий лист, элемент управления). |
Свойство ChartType | Возвращает или задает тип диаграммы. Смотрите константы. |
Свойство ChartStyle | Возвращает или задает стиль диаграммы. Значение нужного стиля можно узнать, записав макрос. |
Добрый день,
а как изменять цвета элементов на графике, задавать подписи осей? особенно как указывать название категорий для осей и в легенду?
После того, как я создал объект Chart, как получить доступ к форматированию всех его элементов?
Как с ним соотносится объект ChartFormat?
Привет, Александр!
Кое-что подскажу. Для диаграммы, созданной кодом Примера 2:
Программно создать поле для названия вертикальной оси мне не удалось.
Спасибо! А если я вот создал график Charts.Add. Он автоматически вставился на отдельный лист, то я тогда как применяю метод Select? Диаграмма на отдельном листе тоже воспринимается как отдельный worksheet?
Собственно глобально у меня пока вопрос в том, как понимать встроенные графики и графики на отдельных листах? Это все объекты семейства Charts?
Как обращаться к встроенным графикам? Лист1.ChartObjects(1).Select — тут я так понимаю, один график на листе. А если их много, как определить их название или номер? А если есть еще графики на отдельных листах?
Диаграммы на отдельных листах — коллекция Charts, принадлежащая книге. Диаграммы на одном листе — коллекция ChartObjects, принадлежащая листу.
Для диаграмм на одном листе:
Для диаграмм на отдельных листах:
Да, понял, спасибо!
теперь как-то прояснилось. Я застрял теперь на выводе значений на график и позиционированием цифр относительно столбика графика. Что это за свойства?
вот я сделал такой пример построения графика.
В принципе все, работает. я только не понимаю, как задать категории на вертикальную ось и почему он сразу не подхватывает названия из первого столбца.
Обсуждение закрыто.