Диаграмма в ms excel может быть размещена на листе макросов

20 Июл

Как создать диаграмму с помощью макроса

Иногда не хочется тратить время на составление диаграммы. Представьте сами — вкладка «Вставка», кнопка диаграммы, выбор типа, выделение ячеек для «забора» данных, перемещение, переименование!.. И это еще не всё, это мы так, пробежались. Гораздо проще указать все условия сразу в макросе! Как? Смотрите наше новое видео!

Текст макроса:

Sub CreateChart()
   ‘ Создание и настройка диаграммы
   With Charts.Add
      ‘ Данные из первого листа
      .SetSourceData Source:=Worksheets(1).Range(«A2:E4»)
      ‘ Заголовок
      .HasTitle = True
      .ChartTitle.Text = «Выручка по магазинам»
      ‘ Активизируем диаграмму
      .Activate
   End With
End Sub

Всем удачи!

How to add, edit, and position charts in Excel using VBA.

This tutorial covers what to do when adding the chart.

b50b63d27ee63c7c9c4688e821b4ab02.png

Sections:

Add a Chart with VBA/Macros

Set Chart Source Data

Set Chart Type

Change Chart Title

Set Category and Value Titles

Include a Legend

Change Chart Size and Position

Fewer Arguments

Notes

Add a Chart with VBA/Macros

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

This is the basic code for adding a chart to a worksheet using a macro. Each section of code in the macro has a comment that explains what that section does, also, each section below here explains how to change and use the macro in more detail.

Set Chart Source Data

This tells the chart what data to use.

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

Source:=Worksheets(«Sheet1»).Range(«A1:E4») this holds the range reference for the chart.

Worksheets(«Sheet1»).Range(«A1:E4») is the range reference.

Make sure to specify from which worksheet you want to get the source data, otherwise, it will come from the currently active or visible worksheet.

Possible Values

Any range from any worksheet, including named ranges.

Set Chart Type

This controls the type of chart to use.

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

Gallery:=xlLine the name of this argument is Gallery, which can seem confusing, but it just controls the type of chart that will be used to display your source data. xlLine is the type of chart that will be used — you can view a full list of possible chart types below here.

List of Possible Chart Types:

Name Value Description
xl3DArea -4098 3D Area.
xl3DAreaStacked 78 3D Stacked Area.
xl3DAreaStacked100 79 100% Stacked Area.
xl3DBarClustered 60 3D Clustered Bar.
xl3DBarStacked 61 3D Stacked Bar.
xl3DBarStacked100 62 3D 100% Stacked Bar.
xl3DColumn -4100 3D Column.
xl3DColumnClustered 54 3D Clustered Column.
xl3DColumnStacked 55 3D Stacked Column.
xl3DColumnStacked100 56 3D 100% Stacked Column.
xl3DLine -4101 3D Line.
xl3DPie -4102 3D Pie.
xl3DPieExploded 70 Exploded 3D Pie.
xlArea 1 Area
xlAreaStacked 76 Stacked Area.
xlAreaStacked100 77 100% Stacked Area.
xlBarClustered 57 Clustered Bar.
xlBarOfPie 71 Bar of Pie.
xlBarStacked 58 Stacked Bar.
xlBarStacked100 59 100% Stacked Bar.
xlBubble 15 Bubble.
xlBubble3DEffect 87 Bubble with 3D effects.
xlColumnClustered 51 Clustered Column.
xlColumnStacked 52 Stacked Column.
xlColumnStacked100 53 100% Stacked Column.
xlConeBarClustered 102 Clustered Cone Bar.
xlConeBarStacked 103 Stacked Cone Bar.
xlConeBarStacked100 104 100% Stacked Cone Bar.
xlConeCol 105 3D Cone Column.
xlConeColClustered 99 Clustered Cone Column.
xlConeColStacked 100 Stacked Cone Column.
xlConeColStacked100 101 100% Stacked Cone Column.
xlCylinderBarClustered 95 Clustered Cylinder Bar.
xlCylinderBarStacked 96 Stacked Cylinder Bar.
xlCylinderBarStacked100 97 100% Stacked Cylinder Bar.
xlCylinderCol 98 3D Cylinder Column.
xlCylinderColClustered 92 Clustered Cone Column.
xlCylinderColStacked 93 Stacked Cone Column.
xlCylinderColStacked100 94 100% Stacked Cylinder Column.
xlDoughnut -4120 Doughnut.
xlDoughnutExploded 80 Exploded Doughnut.
xlLine 4 Line.
xlLineMarkers 65 Line with Markers.
xlLineMarkersStacked 66 Stacked Line with Markers.
xlLineMarkersStacked100 67 100% Stacked Line with Markers.
xlLineStacked 63 Stacked Line.
xlLineStacked100 64 100% Stacked Line.
xlPie 5 Pie.
xlPieExploded 69 Exploded Pie.
xlPieOfPie 68 Pie of Pie.
xlPyramidBarClustered 109 Clustered Pyramid Bar.
xlPyramidBarStacked 110 Stacked Pyramid Bar.
xlPyramidBarStacked100 111 100% Stacked Pyramid Bar.
xlPyramidCol 112 3D Pyramid Column.
xlPyramidColClustered 106 Clustered Pyramid Column.
xlPyramidColStacked 107 Stacked Pyramid Column.
xlPyramidColStacked100 108 100% Stacked Pyramid Column.
xlRadar -4151 Radar.
xlRadarFilled 82 Filled Radar.
xlRadarMarkers 81 Radar with Data Markers.
xlStockHLC 88 High-Low-Close.
xlStockOHLC 89 Open-High-Low-Close.
xlStockVHLC 90 Volume-High-Low-Close.
xlStockVOHLC 91 Volume-Open-High-Low-Close.
xlSurface 83 3D Surface.
xlSurfaceTopView 85 Surface (Top View).
xlSurfaceTopViewWireframe 86 Surface (Top View wireframe).
xlSurfaceWireframe 84 3D Surface (wireframe).
xlXYScatter -4169 Scatter.
xlXYScatterLines 74 Scatter with Lines.
xlXYScatterLinesNoMarkers 75 Scatter with Lines and No Data Markers.
xlXYScatterSmooth 72 Scatter with Smoothed Lines.
xlXYScatterSmoothNoMarkers 73 Scatter with Smoothed Lines and No Data Markers.

Change Chart Title

Title of the chart.

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

Title:=»Chart Title» put whatever you want inside of the quotation marks for the title of the chart.

Set Category and Value Titles

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

CategoryTitle:=»Category Title» the title that goes along the bottom of the chart. Put whatever you want within the quotation marks.

ValueTitle:=»Value Title» the title that goes along the left side of the chart. Put whatever you want within the quotation marks.

Include a Legend

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

HasLegend:=True when this is set to True, a legend will appear — also, often times a legend will appear by default. If you want to make sure there is no legend, set this value to False.

Possible Values

True show a legend.

False don’t show a legend.

Sometimes legends appear by default; use False when you want to ensure that none will appear.

Change Chart Size and Position

Sub CreateChart()

'Tell the macro to make a variable that can hold the chart.
Dim myChart As ChartObject

'Create a chart and put the newly created chart inside of the variable created above.
Set myChart = Worksheets("sheet1").ChartObjects.Add(10, 80, 300, 175)

'Add some basic elements to the chart
myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

End Sub

ChartObjects.Add(10, 80, 300, 175) the numbers here control the size and position of the chart.

Add(Left, Top, Width, Height)

10 is the position from the left side of the worksheet. You can set this number to whatever you want so that the chart fits into your data nicely.

80 is the position from the top of the worksheet. You can set this number to whatever you want so that the chart fits into your data nicely.

300 is the width of the chart.

175 is the height of the chart.

Play around with these values until you get the desired size and position of the chart in your worksheet. Note that adding a legend to a chart will make it seem smaller as there will be less space for the data to be displayed.

Fewer Arguments

The above example includes a kind of ‘interesting’ way of writing the arguments for a function in VBA.

myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title", _
    HasLegend:=True

Each argument for the ChartWizard is put onto its own line and follows this format:

Source:= each line begins with the name of the argument and a :=

, _ each line ends with a comma and an underscore.

Last line this is important! The last line for the ChartWizard, should not end with , _ Notice that the last line is this: HasLegend:=True but if you did not want to include the HasLegend argument and wanted it to end with the ValueTitle argument, you would delete the HasLegend argument (entire line) and remove the , _ from the Value Title argument, like this:

myChart.Chart.ChartWizard _
    Source:=Worksheets("Sheet1").Range("A1:E4"), _
    Gallery:=xlLine, _
    Title:="Chart Title", _
    CategoryTitle:="Category Title", _
    ValueTitle:="Value Title"

This may seem confusing at first, but it’s standard practice in VBA and Macros.

Notes

There are many ways to add charts to Excel, especially considering new and old versions of the program; however, the example above provides a robust solution that will work across many versions of Excel.

Download the sample file to see the above examples in Excel.

В данном разделе мы рассмотрим, каким образом можно построить диаграмму с помощью макроса.

Предположим, что у нас есть таблица с исходными данными (рис. 4.1), на основании которых необходимо построить диаграмму.

Рис. 4.1. Исходные данные для построения диаграммы

В данной таблице представлена информация о выручке за первый квартал (помесячно) по четырем торговым точкам. Обратите внимание на расположение таблицы (то есть на координаты диапазона, в котором она находится, – А1:Е4).

Для построения диаграммы следует написать и выполнить макрос, код которого приведен в листинге 4.1.

Листинг 4.1. Макрос построения диаграммы

Sub CreateChart()

‘ Создание и настройка диаграммы

With Charts.Add

‘ Данные из первого листа

.SetSourceData Source:=Worksheets(1).Range(«A1:E4»)

‘ Заголовок

.HasTitle = True

.ChartTitle.Text = «Выручка по магазинам»

‘ Активизируем диаграмму

.Activate

End With

End Sub

В результате выполнения данного макроса будет построена диаграмма, изображенная на рис. 4.2.

Рис. 4.2. Построенная диаграмма

При написании макроса наряду с другими параметрами мы указали диапазон, который следует обрабатывать (А1:Е4), а также заголовок диаграммы – Выручка по магазинам. Созданная диаграмма помещается на автоматически сформированный рабочий лист, которому по умолчанию присваивается имя Диаграмма1 (при последующих построениях диаграммы каждый раз будет создаваться новый лист Диаграмма с номером, увеличенным на 1 по сравнению с предыдущим листом).

При необходимости на основании этих же данных (см. рис. 4.1) можно создать внедренную диаграмму. Для этого нужно написать и запустить следующий макрос (листинг 4.2).

Листинг 4.2. Построение внедренной диаграммы

Sub CreateEmbeddedChart()

‘ Создание и настройка внедренной диаграммы

With Worksheets(1).ChartObjects.Add(100, 60, 250, 200)

‘ Объемная диаграмма

.Chart.ChartType = xl3DArea

‘ Источник данных

.Chart.SetSourceData Source:=Worksheets(1).Range(«A1:E4»)

End With

End Sub

Результат выполнения данного макроса представлен на рис. 4.3.

На рисунке видно, что диаграмма внедрена в рабочий лист с исходными данными.

Рис. 4.3. Внедренная диаграмма

Можно также создать диаграмму на основе выделенных данных. В листинге 4.3 приведен текст макроса, в котором, помимо прочего, указывается размер диаграммы и ее расположение.

Листинг 4.3. Создание диаграммы на основе выделенных данных

Sub CreateCharOnSelection()

‘ Создание диаграммы (с заданием положения на листе)

With ActiveSheet.ChartObjects.Add( _

Selection.Left + Selection.Width, _

Selection.Top + Selection.Height, 300, 200).Chart

‘ Тип диаграммы

.ChartType = xlColumnClustered

‘ Источник данных – выделение

.SetSourceData Source:=Selection, PlotBy:=xlColumns

‘ Без легенды

.HasLegend = False

‘ Без заголовка

.HasTitle = True

.ChartTitle.Characters.Text = «Выручка за период»

‘ Выделение диаграммы

.Parent.Select

End With

End Sub

Результат выполнения данного макроса представлен на рис. 4.4 – на основании данных таблицы, которая расположена в левом верхнем углу, создана диаграмма.

Рис. 4.4. Диаграмма на основе выделенных данных

Не стоит забывать, что перед запуском макроса необходимо выделить диапазон, данные которого должны быть учтены при построении диаграммы.

При подведении указателя мыши к столбикам диаграммы на экране будет отображаться соответствующая всплывающая подсказка.

Программное создание графика (диаграммы) в VBA Excel с помощью метода Charts.Add на основе данных из диапазона ячеек на рабочем листе. Примеры.

Метод Charts.Add

В настоящее время на сайте разработчиков описывается метод Charts.Add2, который, очевидно, заменил метод Charts.Add. Тесты показали, что Charts.Add продолжает работать в новых версиях VBA Excel, поэтому в примерах используется именно он.

Синтаксис

Charts.Add ([Before], [After], [Count])

Charts.Add2 ([Before], [After], [Count], [NewLayout])

Параметры

Параметры методов Charts.Add и Charts.Add2:

Параметр Описание
Before Имя листа, перед которым добавляется новый лист с диаграммой. Необязательный параметр.
After Имя листа, после которого добавляется новый лист с диаграммой. Необязательный параметр.
Count Количество добавляемых листов с диаграммой. Значение по умолчанию – 1. Необязательный параметр.
NewLayout Если NewLayout имеет значение True, диаграмма вставляется с использованием новых правил динамического форматирования (заголовок имеет значение «включено», а условные обозначения – только при наличии нескольких рядов). Необязательный параметр.

Если параметры Before и After опущены, новый лист с диаграммой вставляется перед активным листом.

Примеры

Таблицы

В качестве источников данных для примеров используются следующие таблицы:

Исходные таблицы для создания диаграмм

Пример 1

Программное создание объекта Chart с типом графика по умолчанию и по исходным данным из диапазона «A2:B26»:

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 из первого примера:

Объект Chart с типом графика по умолчанию

Пример 2

Программное создание объекта Chart с двумя линейными графиками по исходным данным из диапазона «A2:C26»:

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 из второго примера:

Объект Chart с двумя линейными графиками (с маркерами)

Пример 3

Программное создание объекта Chart с круговой диаграммой, разделенной на сектора, по исходным данным из диапазона «E2:F7»:

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 с круговой диаграммой

Примечание

В примерах использовались следующие методы и свойства объекта Chart:

Компонент Описание
Метод SetSourceData Задает диапазон исходных данных для диаграммы.
Метод Location Перемещает диаграмму в заданное расположение (новый лист, существующий лист, элемент управления).
Свойство ChartType Возвращает или задает тип диаграммы. Смотрите константы.
Свойство ChartStyle Возвращает или задает стиль диаграммы. Значение нужного стиля можно узнать, записав макрос.

Панельные диаграммы идеально подходят для раздельного отображения сразу нескольких рядов данных. Ниже показан линейный график, явно перегруженный линиями, а справа – его аналог в виде панельной диаграммы, на которой ряды данных располагаются отдельно.

Рис. 1. Линейный график и панельная диаграмма; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Скачать заметку в формате Word или pdf, примеры в архиве (внутри файл Excel с поддержкой макросов; политика провайдера не позволяет напрямую загружать такие файлы)

Запись макроса

Размещение каждого графика на панельной диаграмме вручную – задача не из легких.[1] На написание макроса, который это сделает, у вас уйдет примерно столько же времени, но этот вариант имеет свои преимущества. Во-первых, с использованием макроса вы можете быть уверены, что все графики будут размещены на панели идеально четко и ни один из них не сместится ни на пиксель. Второе преимущество связано с возможными изменениями, которые могут произойти в будущем. Если вы что-то поменяете на графиках, вам придется заново вручную расставлять их, на что потребуется столько же времени, сколько и в первый раз. Что касается макроса, то вам необходимо будет лишь изменить пару цифр и запустить его.

Давайте начнем с записи макроса, чтобы подсмотреть манипуляции с объектами. Определите максимальное значение в диапазоне В1:I14. Оно нам понадобится, чтобы установить шкалу ординат. МАКС(B2:I14)=6420. На вкладке Разработчик нажмите на кнопку Запись макроса и в открывшемся диалоговом окне нажмите Ok. Выделите диапазон A1:B14 на рабочем листе. На вкладке Вставка нажмите Рекомендуемые диаграммы и выберите вариант График. Удалите горизонтальные линии сетки. Выделите вертикальную ось, задайте максимальное значение 7000 и оформите ее, как показано на рис. 2. Измените размер диаграммы. Переместите диаграмму. Не важно, куда – нам лишь нужно получить соответствующий код. Оформите горизонтальную ось. На вкладке Разработчик нажмите Остановить запись. В результате мы получим код макроса, показанный ниже. Чтобы посмотреть его, перейдите на вкладку Разработчик и нажмите на кнопку Visual Basic:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

Sub Макрос1()

Макрос1 Макрос

    Range(«A1:B14»).Select

    ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select

    ActiveChart.SetSourceData Source:=Range(«‘Рис. 2’!$A$1:$B$14»)

    ActiveChart.Axes(xlValue).MajorGridlines.Select

    Selection.Delete

    ActiveSheet.ChartObjects(«Диаграмма 22»).Activate

    ActiveChart.Axes(xlValue).Select

    ActiveChart.Axes(xlValue).MaximumScale = 7000

    Selection.MajorTickMark = xlOutside

    With Selection.Format.Line

        .Visible = msoTrue

        .ForeColor.ObjectThemeColor = msoThemeColorBackground1

        .ForeColor.TintAndShade = 0

        .ForeColor.Brightness = 0.150000006

    End With

    ActiveChart.ChartTitle.Select

    Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue

    Selection.Left = 159.087

    Selection.Top = 6

    ActiveChart.Axes(xlCategory).Select

    ActiveChart.Axes(xlCategory).MajorUnit = 3

    ActiveChart.ChartArea.Select

    ActiveSheet.Shapes(«Диаграмма 22»).IncrementLeft 376.5

    ActiveSheet.Shapes(«Диаграмма 22»).IncrementTop 44.25

    ActiveSheet.Shapes(«Диаграмма 22»).ScaleWidth 1.1677084427, msoFalse, _

        msoScaleFromTopLeft

    ActiveSheet.Shapes(«Диаграмма 22»).ScaleHeight 1.04340296, msoFalse, _

        msoScaleFromTopLeft

End Sub

Рис. 2. Запись макроса

При записи макроса Excel записывает строки кода для всех действий. Так, первая строка создана в ответ на выделение диапазона ячеек, вторая – на создание диаграммы и т.д. Запись макросов полезно использовать для изучения объектов модели Excel и синтаксиса выражений. В данном случае вы видите, что нам придется поработать с объектами и методами AddChart2, SetSourceData, ActiveChart и ChartObjects. Не беспокойтесь, если не понимаете сгенерированный код, мы будем использовать его лишь как образец. И повторно запустить этот макрос у вас не получится, так как Excel создаст новую диаграмму с названием отличным от «Диаграмма 22».

Вы, наверное, уже обратили внимание, что во время ваших действий Excel выбирает или активирует те или иные объекты, а затем выполняет какие-то действия с ними. В макросе делается только так, поскольку Excel не знает заранее, будете ли вы выполнять какие-то действия с объектом при его выборе. Но в своем коде вам не стоит предварительно выбирать объекты для работы.

Создание графика

Ниже кода макроса введите Sub MakeSinglePane и нажмите Enter. VBA автоматически добавит скобки к названию подпрограммы и завершит ее инструкцией End Sub. Ключевые слова Sub и End Sub ограничивают начало и окончание вашей программы. Создадим переменную, в которой будем хранить диаграмму. Вместо использования объекта ActiveChart мы присвоим созданный график переменной и будем манипулировать с ней. Введите следующий код между ключевыми словами Sub и End Sub:

Sub MakeSinglePanel()

   Dim cht As Chart

   Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

End Sub

При помощи ключевого слова Dim мы создаем переменную типа график, а выражение Set позволяет присвоить ей конкретный тип графика. Константа xlLine гарантирует скрытие маркеров на графике. Параметр 227 задает стиль диаграммы. Если вы запустите этот макрос, то получите пустую диаграмму на рабочем листе.

Рис. 3. Пустая диаграмма

Нам же необходимо манипулировать переменной cht для добавления элементов на график.

График с данными

Начнем с установки диапазона данных для диаграммы. Для этого используем связку With и End With для экономии чернил и лучшей организации кода. Добавьте в ваш макрос:

Sub MakeSinglePanel()

   Dim cht As Chart

   Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

   With cht

      .SetSourceData ActiveSheet.Range(«A1:B14»)

   End With

End Sub

Если запустить этот код, мы получим график с данными:

Рис. 4. Диаграмма с исходными данными

Форматирование графика

Отформатируем ось ординат, ось абсцисс, удалим горизонтальные линии сетки:

Рис. 5. Отформатированы оси

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub MakeSinglePanel()

Dim cht As Chart

Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

With cht

.SetSourceData ActiveSheet.Range(«A1:B14»)

.Axes(xlValue).MajorGridlines.Delete

.Axes(xlValue).MinimumScale = 0

.Axes(xlValue).MaximumScale = 7000

.Axes(xlValue).MajorTickMark = xlOutside

With .Axes(xlValue).Format.Line

.Visible = msoTrue

    .ForeColor.ObjectThemeColor = msoThemeColorBackground1

.ForeColor.TintAndShade = 0

.ForeColor.Brightness = 0.150000006

End With

.Axes(xlCategory).MajorUnit = 3

End With

End Sub

Позиционирование графика

Изменим размер графика и переместим его в нужное место. Автоматически записанный макрос оперирует для этого объектом Shape с использованием свойств и методов для изменения масштаба объекта и перемещения относительно текущей позиции. Я не знаю, почему Excel делает именно так, но для манипуляций есть более простой способ. До этого мы манипулировали объектом Chart, у которого есть родительский объект ChartObject. И у этого родительского объекта присутствуют свойства вроде Top и Height, позволяющие устанавливать координаты элемента напрямую. В следующем фрагменте кода мы добавим еще один блок With и используем свойство Parent нашего графика, чтобы изменить размеры и положение нашего объекта:

Рис. 6. Маленькая диаграмма, как элемент панельной инфографики

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Sub MakeSinglePanel()

    Dim cht As Chart

    Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

    With cht

        .SetSourceData ActiveSheet.Range(«A1:B14»)

        .Axes(xlValue).MajorGridlines.Delete

        .Axes(xlValue).MinimumScale = 0

        .Axes(xlValue).MaximumScale = 7000

        .Axes(xlValue).MajorTickMark = xlOutside

        With .Axes(xlValue).Format.Line

            .Visible = msoTrue

            .ForeColor.ObjectThemeColor = msoThemeColorBackground1

            .ForeColor.TintAndShade = 0

            .ForeColor.Brightness = 0.150000006

        End With

        .Axes(xlCategory).MajorUnit = 3

        With .Parent

            .Top = 10

            .Left = 460

            .Height = 145

            .Width = 260

        End With

    End With

End Sub

Теперь наш код в точности повторяет действия записанного макроса. Вы можете запускать его многократно, и создаваемые графики будут размещаться один поверх другого.

Создание панели из восьми графиков

В наши же планы входит создание восьми графиков, а не одного. Вы можете использовать для этого наш макрос MakeSinglePanel, но для каждого графика вам придется вручную менять его координаты. Лучше создать макрос MakeSinglePanel2, который будет принимать на вход аргументы и использовать их в коде:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

Sub MakeSinglePanel2(rSource As Range, _

        dTop As Double, dLeft As Double, _

        dHeight As Double, dWidth As Double)

    Dim cht As Chart

    Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

    With cht

        .SetSourceData rSource

        .Axes(xlValue).MajorGridlines.Delete

        .Axes(xlValue).MinimumScale = 0

        .Axes(xlValue).MaximumScale = 7000

        .Axes(xlValue).MajorTickMark = xlOutside

        With .Axes(xlValue).Format.Line

            .Visible = msoTrue

            .ForeColor.ObjectThemeColor = msoThemeColorBackground1

            .ForeColor.TintAndShade = 0

            .ForeColor.Brightness = 0.150000006

        End With

        .Axes(xlCategory).MajorUnit = 3

        With .Parent

            .Top = dTop

            .Left = dLeft

            .Height = dHeight

            .Width = dWidth

        End With

    End With

End Sub

При создании первого макроса вручную VBA автоматически добавлял скобки после названия подпрограммы. Внутри этих скобок вы можете задавать аргументы, которые будут поступать на вход макроса. Аргументы внутри макроса работают как обычные переменные, за исключением того, что их значения не задаются в макросе, а поступают извне при вызове подпрограммы. В данном случае мы добавили аргумент типа Range, с помощью которого будем задавать исходный диапазон для графика, а также четыре аргумента типа Double, которые помогут нам позиционировать диаграмму. Вы можете вызвать подпрограмму MakeSinglePanel2 из другого макроса, передав ей на вход необходимые аргументы. Например:

MakeSinglePanel2 ActiveSheet.Range(«A1:B14»), 10, 460, 145, 260

Таким образом, наши переменные не инициализируются внутри макроса, а их значения поступают извне. Вы можете передать в макрос разные аргументы, что позволит построить разные диаграммы. Давайте вызовем наш макрос восемь раз с четко выверенными значениями аргументов для создания восьми графиков в рамках единой панели:

Sub MakeAllPanels()

    With ActiveSheet

        MakeSinglePanel2 .Range(«A1:B14»), 10, 460, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, C1:C14»), 155, 460, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, D1:D14»), 300, 460, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, E1:E14»), 445, 460, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, F1:F14»), 10, 720, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, G1:G14»), 155, 720, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, H1:H14»), 300, 720, 145, 260

        MakeSinglePanel2 .Range(«A1:A14, I1:I14»), 445, 720, 145, 260

    End With

End Sub

Рис. 7. Панель из 8 графиков

Организация цикла

Возможно, вы заметили закономерности в переданных макросу MakeSinglePanel2 аргументах. Всегда, когда вы замечаете определенные шаблоны в коде, у вас должно возникать желание реализовать выполнение операции в цикле, чтобы добавить макросу гибкости. Давайте создадим новую подпрограмму MakeAllPanels2(), в которой создание и размещение наших диаграмм на панели будет выполняться в цикле. Это позволит в будущем легко менять размеры элементов и их расположение. В новом макросе для разнообразия разместим диаграммы сначала слева направо, а затем сверху вниз:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Sub MakeAllPanels2()

    Dim rAxis As Range

    Dim i As Long, j As Long

    Dim lCnt As Long

    Dim dWidth As Double, dHeight As Double

    Set rAxis = ActiveSheet.Range(«A1:A14»)

    dTop = 10

    dLeft = 460

    dWidth = 260

    dHeight = 145

    For i = 1 To 4

        For j = 1 To 2

            lCnt = lCnt + 1

            MakeSinglePanel2 _

                rSource:=Union(rAxis, rAxis.Offset(0, lCnt)), _

                dTop:=dTop + ((i 1) * dHeight), _

                dLeft:=dLeft + ((j 1) * dWidth), _

                dHeight:=dHeight, _

                dWidth:=dWidth

        Next j

    Next i

End Sub

Вся основная работа в этом макросе выполняется внутри двух вложенных циклов For. В первом определяется высота панели, а во втором – ширина. Поскольку мы используем один диапазон A1:A14 для оси абсцисс, мы заранее сохранили его в переменной. Затем мы использовали выражение Union для объединения этого диапазона с нужной нам колонкой со значениями по оси ординат.

Верхнюю левую координату графиков мы отсчитываем от значений 10 и 460. Каждый раз при запуске итерации внешнего цикла мы добавляем к предыдущей координате по вертикали высоту элемента, чтобы новый график разместился точно под предыдущим. То же самое происходит с горизонтальным смещением во внутреннем цикле. Если вы захотите разместить диаграммы в формате 4*2, то можете просто объявить внешний цикл как For i = 1 to 2, а внутренний – как For j = 1 to 4.

Оформление панели, как единого целого

Наличие горизонтальной оси на всех графиках не является обязательным. Оставим подписи только на двух нижних графиках. Проблема с удалением некоторых подписей состоит в том, что размер диаграмм с удаленной осью автоматически увеличится, что нарушит наши пропорции. Чтобы это обойти, мы можем зафиксировать значение свойства PlotArea.InsideHeight для всех графиков. Если устанавливать свойство PlotArea.InsideHeight напрямую, все ваши графики будут масштабированы одинаково, но значение свойства ChartArea.Height не изменится, и в местах, где были оси, останется пустое пространство.

Напишем новый макрос MakeSinglePanel3. На этот раз это будет не подпрограмма, а функция. Функция отличается от подпрограммы тем, что может возвращать значение или объект в вызывающий блок кода. Наша функция будет возвращать созданный график, в котором свойство PlotArea.InsideHeight можно будет установить позже. Функция также содержит два новых аргумента: dInsideHeight и bHideAxis:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

Function MakeSinglePanel3(rSource As Range, _

    dTop As Double, dLeft As Double, _

    dHeight As Double, dWidth As Double, _

    dInsideHeight As Double, bHideAxis As Boolean) As Chart

    Dim i As Long

    Dim cht As Chart

    Set cht = ActiveSheet.Shapes.AddChart2(227, xlLine).Chart

    With cht

        .SetSourceData rSource

        .Axes(xlValue).MajorGridlines.Delete

        .Axes(xlValue).MinimumScale = 0

        .Axes(xlValue).MaximumScale = 7000

        .Axes(xlValue).MajorTickMark = xlOutside

        With .Axes(xlValue).Format.Line

            .Visible = msoTrue

            .ForeColor.ObjectThemeColor = msoThemeColorBackground1

            .ForeColor.TintAndShade = 0

            .ForeColor.Brightness = 0.150000006

        End With

        .Axes(xlCategory).MajorUnit = 3

        With .Parent

            .Top = dTop

            .Left = dLeft

            .Height = dHeight

            .Width = dWidth

        End With

        If bHideAxis Then

            With .Axes(xlPrimary)

                .Delete

                .HasMajorGridlines = False

            End With

            .Parent.Height = dHeight

        Else

            .Parent.Height = dHeight

            Do Until .PlotArea.InsideHeight > dInsideHeight

                .Parent.Height = .Parent.Height + 1

            Loop

        End If

     End With

     Set MakeSinglePanel3 = cht

End Function

Аргумент bHideAxis отвечает за то, будет ли скрыта ось на графике. Если он равен True, основная ось будет скрыта. В противном случае мы имеем дело с диаграммой в нижнем ряду панели, и высота будет увеличиваться, пока область построения не сравняется по размерам с другими графиками. В заключительной строке созданный график возвращается в вызывающий код путем присваивания его имени функции.

Вызывающую подпрограмму также потребуется изменить. Нам придется определять, находится ли график на нижнем ряду панели, чтобы правильно устанавливать значение аргумента bHideAxis.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

Sub MakeAllPanels3()

    Dim rAxis As Range

    Dim i As Long, j As Long

    Dim lCnt As Long

    Dim dWidth As Double, dHeight As Double

    Dim dInsideHeight As Double

    Dim cht As Chart

    Const lHigh As Long = 4

    Const lWide As Long = 2

    Set rAxis = ActiveSheet.Range(«A1:A14»)

    dTop = 10

    dLeft = 460

    dWidth = 230

    dHeight = 130

    For i = 1 To lHigh

        For j = 1 To lWide

            lCnt = lCnt + 1

            Set cht = MakeSinglePanel3( _

                rSource:=Union(rAxis, rAxis.Offset(0, lCnt)), _

                dTop:=dTop + ((i 1) * dHeight), _

                dLeft:=dLeft + ((j 1) * dWidth), _

                dHeight:=dHeight, _

                dWidth:=dWidth, _

                dInsideHeight:=dInsideHeight, _

                bHideAxis:=i < lHigh)

            If i = 1 And j = 1 Then

                dInsideHeight = cht.PlotArea.InsideHeight

            End If

        Next j

    Next i

End Sub

Эта подпрограмма содержит две новые переменные для хранения высоты области построения и объекта с графиком, возвращаемого функцией. Также мы объявили две константы с высотой и шириной панели. Вместо того чтобы вставлять значения непосредственно в циклы For Next, вы можете объявить константы в самом начале процедуры и использовать их при необходимости. Таким образом, если вы захотите изменить ориентацию панели, вам необходимо будет обновить значения констант и все.

Здесь мы вызываем не подпрограмму для создания графиков, а функцию, возвращающую объект диаграммы, который мы присваиваем переменной cht. При таком вызове функции все аргументы должны быть заключены в круглые скобки. После вызова функции мы сохраняем значение свойства PlotArea.InsideHeight первого созданного графика, чтобы при достижении нижнего ряда функция знала, какой высоты создавать диаграммы. Итоговая панельная диаграмма:

Рис. 8. Инфографика на основе панельной диаграммы

[1] Это немного переработанный фрагмент книги: Дик Куслейка. Визуализация данных при помощи дашбордов и отчетов в Excel.

Skip to content

Как создать набор бессвязных диаграмм

На чтение 2 мин. Просмотров 714

Что делает макрос: Если вам необходимо скопировать диаграммы из книги и вставить их в другом месте (другой рабочей книге, PowerPoint, Outlook и т.д.), лучше отключить их от исходных данных источника. Таким образом, вы не будете получать раздражающие сообщения от Excel. Этот макрос копирует все диаграммы в активном
листе, вставляет их в новую книгу, и отключает их от исходных данных источника.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

Этот макрос использует метод ShapeRange.Group, чтобы сгруппировать все диаграммы на активном листе в одну форму. После того, как диаграммы сгруппированы, мы копируем группу, и вставляем ее в новую книгу. Затем мы используем метод BreakLink, чтобы удалить ссылки на данные источника.

Код макроса

Sub SozdatNaborDiagramm()
'Шаг 1: Объявляем переменные
Dim wbLinks As Variant
'Шаг 2: Сгруппируйте диаграммы, скопируйте группу, а затем 'разгруппируйте
With ActiveSheet.ChartObjects.ShapeRange.Group
.Copy
.Ungroup
End With
'Шаг 3: Вставить в новую книгу и разгруппировать
Workbooks.Add.Sheets(1).Paste
Selection.ShapeRange.Ungroup
'Шаг 4: Разорвать ссылки
wbLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
ActiveWorkbook.BreakLink Name:=wbLinks(1), _
Type:=xlLinkTypeExcelLinks
End Sub

Как этот код работает

  1. Шаг 1 объявляет переменную вариант wbLinks. Макрос использует его в шаге 4, чтобы передать ссылку на источник при разрыве связей.
  2. Шаг 2 использует ChartObjects.ShapeRange.Group для сгруппировки всех диаграмм в единую форму. Макрос копирует группы, в буфер обмена. После того как группа копируется, макрос разгруппировывает диаграммы.
  3. Шаг 3 создает новую рабочую книгу и вставляет скопированную группу на Лист1. После того, как группа была вставлена, мы можем разгруппировать так, чтобы каждая диаграмма была отдельно.
  4. Шаг 4 захватывает ссылку на источник в переменной wbLinks. Макрос Excel говорит разорвать связь.

Обратите внимание, что так как этот метод преобразует исходный график ссылки на формулу массива, этот метод может потерпеть неудачу, если ваш график содержит слишком много точек данных. Сколько это слишком много? Это индивидуально для каждого компьютера, так как ограничено памятью.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Содержание

Диаграммы и графики Excel используются для визуального отображения данных. В этом руководстве мы расскажем, как использовать VBA для создания диаграмм и элементов диаграмм и управления ими.

Вы можете создавать встроенные диаграммы на листе или диаграммы на отдельных листах диаграмм.

Создание встроенной диаграммы с помощью VBA

У нас есть диапазон A1: B4, который содержит исходные данные, показанные ниже:

Вы можете создать диаграмму с помощью метода ChartObjects.Add. Следующий код создаст на листе встроенную диаграмму:

12345678 Sub CreateEmbeddedChartUsingChartObject ()Уменьшить размер встроенной диаграммы как ChartObjectУстановите embeddedchart = Sheets («Sheet1»). ChartObjects.Add (Left: = 180, Width: = 300, Top: = 7, Height: = 200)embeddedchart.Chart.SetSourceData Источник: = Sheets («Sheet1»). Range («A1: B4»)Конец подписки

Результат:

Вы также можете создать диаграмму с помощью метода Shapes.AddChart. Следующий код создаст на листе встроенную диаграмму:

12345678 Подложка CreateEmbeddedChartUsingShapesAddChart ()Заменить встроенную диаграмму как фигуруУстановите embeddedchart = Sheets («Sheet1»). Shapes.AddChartembeddedchart.Chart.SetSourceData Source: = Sheets («Sheet1»). Range («A1: B4»)Конец подписки

Указание типа диаграммы с помощью VBA

У нас есть диапазон A1: B5, который содержит исходные данные, показанные ниже:

Вы можете указать тип диаграммы, используя свойство ChartType. Следующий код создаст круговую диаграмму на листе, поскольку для свойства ChartType задано значение xlPie:

123456789 Sub SpecifyAChartType ()Dim chrt как ChartObjectУстановите chrt = Sheets («Sheet1»). ChartObjects.Add (Left: = 180, Width: = 270, Top: = 7, Height: = 210)chrt.Chart.SetSourceData Source: = Sheets («Sheet1»). Range («A1: B5»)chrt.Chart.ChartType = xlPieКонец подписки

Результат:

Вот некоторые из популярных типов диаграмм, которые обычно указываются, хотя есть и другие:

  • xlArea
  • xlPie
  • xlLine
  • xlRadar
  • xlXYScatter
  • xlSurface
  • xlBubble
  • xlBarClustered
  • xlColumnClustered

Добавление заголовка диаграммы с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Сначала необходимо добавить заголовок диаграммы с помощью метода Chart.SetElement, а затем указать текст заголовка диаграммы, установив свойство ChartTitle.Text.

В следующем коде показано, как добавить заголовок диаграммы и указать текст заголовка активной диаграммы:

123456 Sub AddingAndSettingAChartTitle ()ActiveChart.SetElement (msoElementChartTitleAboveChart)ActiveChart.ChartTitle.Text = «Продажи продукта»Конец подписки

Результат:

Примечание. Сначала необходимо выбрать диаграмму, чтобы сделать ее активной, чтобы можно было использовать объект ActiveChart в своем коде.

Изменение цвета фона диаграммы с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете изменить цвет фона всей диаграммы, установив свойство RGB объекта FillFormat объекта ChartArea. Следующий код придаст диаграмме светло-оранжевый цвет фона:

12345 Sub AddingABackgroundColorToTheChartArea ()ActiveChart.ChartArea.Format.Fill.ForeColor.RGB = RGB (253, 242, 227)Конец подписки

Результат:

Вы также можете изменить цвет фона всей диаграммы, установив свойство ColorIndex объекта Interior объекта ChartArea. Следующий код придаст диаграмме оранжевый цвет фона:

12345 Sub AddingABackgroundColorToTheChartArea ()ActiveChart.ChartArea.Interior.ColorIndex = 40Конец подписки

Результат:

Примечание. Свойство ColorIndex позволяет указать цвет на основе значения от 1 до 56, взятого из предустановленной палитры, чтобы увидеть, какие значения представляют разные цвета, щелкните здесь.

Изменение цвета области графика диаграммы с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете изменить цвет фона только области построения диаграммы, установив свойство RGB объекта FillFormat объекта PlotArea. Следующий код придаст области построения диаграммы светло-зеленый цвет фона:

12345 Sub AddingABackgroundColorToThePlotArea ()ActiveChart.PlotArea.Format.Fill.ForeColor.RGB = RGB (208, 254, 202)Конец подписки

Результат:

Добавление легенды с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете добавить легенду с помощью метода Chart.SetElement. Следующий код добавляет легенду слева от диаграммы:

12345 Подложка AddingALegend ()ActiveChart.SetElement (msoElementLegendLeft)Конец подписки

Результат:

Вы можете указать положение легенды следующими способами:

  • msoElementLegendLeft — отображает легенду в левой части диаграммы.
  • msoElementLegendLeftOverlay — накладывает легенду на левую часть диаграммы.
  • msoElementLegendRight — отображает легенду в правой части диаграммы.
  • msoElementLegendRightOverlay — накладывает легенду на правую часть диаграммы.
  • msoElementLegendBottom — отображает легенду внизу диаграммы.
  • msoElementLegendTop — отображает легенду вверху диаграммы.

Добавление меток данных с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете добавлять метки данных с помощью метода Chart.SetElement. Следующий код добавляет метки данных на внутренний конец диаграммы:

12345 Sub AddingADataLabels ()ActiveChart.SetElement msoElementDataLabelInsideEndКонец подписки

Результат:

Вы можете указать расположение меток данных следующими способами:

  • msoElementDataLabelShow — отображать метки данных.
  • msoElementDataLabelRight — отображает метки данных в правой части диаграммы.
  • msoElementDataLabelLeft — отображает метки данных в левой части диаграммы.
  • msoElementDataLabelTop — отображает метки данных вверху диаграммы.
  • msoElementDataLabelBestFit — определяет наилучшее соответствие.
  • msoElementDataLabelBottom — отображает метки данных внизу диаграммы.
  • msoElementDataLabelCallout — отображает метки данных в виде выноски.
  • msoElementDataLabelCenter — отображает метки данных в центре.
  • msoElementDataLabelInsideBase — отображает метки данных на внутренней основе.
  • msoElementDataLabelOutSideEnd — отображает метки данных на внешнем конце диаграммы.
  • msoElementDataLabelInsideEnd — отображает метки данных на внутреннем конце диаграммы.

Добавление оси X и заголовка в VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете добавить заголовок оси X и оси X с помощью метода Chart.SetElement. Следующий код добавляет к диаграмме заголовки осей X и X:

123456789 Sub AddingAnXAxisandXTitle ()С ActiveChart.SetElement msoElementPrimaryCategoryAxisShow.SetElement msoElementPrimaryCategoryAxisTitleHorizontalКонец сКонец подписки

Результат:

Добавление оси Y и заголовка в VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете добавить заголовок оси Y и оси Y с помощью метода Chart.SetElement. Следующий код добавляет к диаграмме заголовки по осям Y и Y:

1234567 Дополнительное добавлениеAYAxisandYTitle ()С ActiveChart.SetElement msoElementPrimaryValueAxisShow.SetElement msoElementPrimaryValueAxisTitleHorizontalКонец сКонец подписки

Результат:

Изменение числового формата оси

У нас есть диаграмма, выбранная на листе, как показано ниже:

Вы можете изменить числовой формат оси. Следующий код изменяет числовой формат оси Y на валюту:

12345 Sub ChangingTheNumberFormat ()ActiveChart.Axes (xlValue) .TickLabels.NumberFormat = «$ #, ## 0.00″Конец подписки

Результат:

Изменение форматирования шрифта на диаграмме

У нас на листе выбрана следующая диаграмма, как показано ниже:

Вы можете изменить форматирование всего шрифта диаграммы, обратившись к объекту шрифта и изменив его имя, толщину и размер шрифта. Следующий код изменяет тип, вес и размер шрифта всей диаграммы.

12345678910 Sub ChangingTheFontFormatting ()С ActiveChart.ChartArea.Format.TextFrame2.TextRange.Font.Name = «Times New Roman».ChartArea.Format.TextFrame2.TextRange.Font.Bold = Истина.ChartArea.Format.TextFrame2.TextRange.Font.Size = 14Конец с

Результат:

Удаление диаграммы с помощью VBA

У нас есть диаграмма, выбранная на листе, как показано ниже:

Мы можем использовать следующий код, чтобы удалить эту диаграмму:

12345 Sub DeletingTheChart ()ActiveChart.Parent.DeleteКонец подписки

Ссылаясь на коллекцию ChartObjects

Вы можете получить доступ ко всем встроенным диаграммам на листе или в книге, обратившись к коллекции ChartObjects. У нас есть две диаграммы на одном листе, показанном ниже:

Мы обратимся к коллекции ChartObjects, чтобы дать обеим диаграммам на листе одинаковую высоту и ширину, удалить линии сетки, сделать цвет фона одинаковым, дать диаграммам одинаковый цвет области графика и сделать одинаковый цвет линии области графика. цвет:

12345678910111213141516 Sub ReferringToAllTheChartsOnASheet ()Dim cht As ChartObjectДля каждого cht в ActiveSheet.ChartObjectscht.Height = 144,85cht.Width = 246,61cht.Chart.Axes (xlValue) .MajorGridlines.Deletecht.Chart.PlotArea.Format.Fill.ForeColor.RGB = RGB (242, 242, 242)cht.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB (234, 234, 234)cht.Chart.PlotArea.Format.Line.ForeColor.RGB = RGB (18, 97, 172)Следующий чтКонец подписки

Результат:

Вставка диаграммы на отдельный лист диаграммы

У нас есть диапазон A1: B6, который содержит исходные данные, показанные ниже:

Вы можете создать диаграмму, используя метод Charts.Add. Следующий код создаст диаграмму на собственном листе диаграммы:

123456 Sub InsertingAChartOnItsOwnChartSheet ()Листы («Лист1»). Диапазон («A1: B6»). ВыберитеCharts.AddКонец подписки

Результат:

См. Некоторые из наших других руководств по построению графиков:

Графики в Excel

Создайте гистограмму в VBA

 

Alejandro67

Пользователь

Сообщений: 19
Регистрация: 22.07.2013

#1

16.10.2014 01:08:09

Уважаемые, подскажите как изменить код,  что бы диаграммы строились в определенном месте видимой области листа. или же в определенном месте. Код такой:

Скрытый текст

Соответственно все диаграммы строятся на одном и том же месте, друг за другом.  
Метод   записи макрорекодером дает такое решение

Код
ActiveSheet.Shapes("Диаграмма 1093").IncrementLeft -204.

которое не работает  :(  так как здесь идет указание на диаграмму, которая уже была создана.
пробовал присвоить переменную с именем диаграммы, что бы затем ссылаться на неё

Код
t = ActiveChart.Name
ActiveSheet.Shapes(t).IncrementLeft -204.

Увы, и этот метод снова не работает.  :(  
Подскажите как быть в этом случае?.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#2

16.10.2014 07:02:37

Доброе время суток
Замените

Код
ActiveSheet.Shapes.AddChart.Select

на следующий код

Код
Dim chartShape As Shape
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.Left = xxx 'положение от левого края рабочего листа
chartShape.Top = yyy 'положение от верхнего края 

Успехов.

 

Alejandro67

Пользователь

Сообщений: 19
Регистрация: 22.07.2013

#3

16.10.2014 09:49:54

Спасибо, Работает, только надо потом вернуть выделение

Код
Dim chartShape as Shape 
Код
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.Left = xxx 'положение от левого края рабочего листа
chartShape.Top = yyy 'положение от верхнего края
chartShape.Select
 

данный код соответственно будет размещать график по координатам листа.

Если надо разместить график по координатам относительно видимой части листа то нужен такой код:

Код
 Dim chartShape As Shape
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.IncrementLeft xxx 'положение от левого края видимой области
chartShape.IncrementTop yyy ' положение от верхнего края видимой области
chartShape.Select
 
 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#4

16.10.2014 13:07:33

Цитата
Alejandro67 пишет: относительно видимой части

любопытный эффект. Не думал, что Increment именно так работает — отсылок на видимый диапазон в справке нет

F1 творит чудеса

 

apelmon

Пользователь

Сообщений: 1
Регистрация: 19.03.2017

Здравствуйте. Помогите пожалуйста. Не могу запустить записаный макрос. Ошибку в коде выдает на строке ActiveSheet.Shapes.AddChart.Select.

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#6

19.03.2017 14:18:55

Цитата
Максим Зеленский написал:
Не думал, что Increment именно так работает — отсылок на видимый диапазон в справке нет

потому что это не так)
Increment — прирост, увеличение. Соответственно это действие лишь добавляет указанное количество пунктов к текущим координатам объекта.
Откуда трактовка про видимую область — непонятно.
Наверное потому, что диаграмма по умолчанию создается по центру видимой области)

Цитата
apelmon написал:
Не могу запустить записаный макрос

у меня запускается) вашего не вижу.

Понравилась статья? Поделить с друзьями:
  • Диаграмма в excel это определение
  • Диаграмма в excel теория
  • Диаграмма в excel сделанная
  • Диаграмма в excel с текстовыми значениями
  • Диаграмма в excel с множеством значений