How to add, edit, and position charts in Excel using VBA.
This tutorial covers what to do when adding the chart.
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.
Программное создание графика (диаграммы) в 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 из первого примера:
Пример 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 из второго примера:
Пример 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:
Компонент | Описание |
---|---|
Метод SetSourceData | Задает диапазон исходных данных для диаграммы. |
Метод Location | Перемещает диаграмму в заданное расположение (новый лист, существующий лист, элемент управления). |
Свойство ChartType | Возвращает или задает тип диаграммы. Смотрите константы. |
Свойство ChartStyle | Возвращает или задает стиль диаграммы. Значение нужного стиля можно узнать, записав макрос. |
���������� ��������� � ������� �������
���������� ��������� � ������� �������
� ������ ������� �� ����������, ����� ������� ����� ��������� ��������� � ������� �������.
�����������, ��� � ��� ���� ������� � ��������� ������� (���.�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. ��������� �� ������ ���������� ������
�� ����� ��������, ��� ����� �������� ������� ���������� �������� ��������, ������ �������� ������ ���� ������ ��� ���������� ���������.
��� ���������� ��������� ���� � ��������� ��������� �� ������ ����� ������������ ��������������� ����������� ���������.
Как создать диаграмму с помощью макроса
Иногда не хочется тратить время на составление диаграммы. Представьте сами — вкладка «Вставка», кнопка диаграммы, выбор типа, выделение ячеек для «забора» данных, перемещение, переименование!.. И это еще не всё, это мы так, пробежались. Гораздо проще указать все условия сразу в макросе! Как? Смотрите наше новое видео!
Текст макроса:
Sub CreateChart()
‘ Создание и настройка диаграммы
With Charts.Add
‘ Данные из первого листа
.SetSourceData Source:=Worksheets(1).Range(«A2:E4»)
‘ Заголовок
.HasTitle = True
.ChartTitle.Text = «Выручка по магазинам»
‘ Активизируем диаграмму
.Activate
End With
End Sub
Всем удачи!
Панельные диаграммы идеально подходят для раздельного отображения сразу нескольких рядов данных. Ниже показан линейный график, явно перегруженный линиями, а справа – его аналог в виде панельной диаграммы, на которой ряды данных располагаются отдельно.
Рис. 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.
Условное форматирование в диаграммах Excel.
Изучая статистику по коронавирусу (актуальному на момент написания статьи), я зашел на информационную страницу Яндекса с данными по заболеваниям и выздоровлениям и обнаружил там довольно интересную диаграмму:
Заинтересовало меня то, что цвет столбца изменяется в зависимости от соответствующего значения. И чем больше это значение, тем сильнее «краснеет» цвет столбца диаграммы. То есть, грубо говоря, это — условное форматирование столбцов диаграммы, где условие — принадлежность числового значения самого столбца к некоторому диапазону.
Мне захотелось реализовать что-то подобное в Excel, но я с удивлением обнаружил, что стандартные инструменты для реализации условного форматирования диаграммы в нем отсутствуют. Да, можно вручную закрасить нужный нам столбец в определенный цвет, но если у нас много условий закрашивания или много столбцов в диаграмме — это будет довольно проблематично. Именно поэтому, я решил немного углубиться в эту тему и найти возможные способы, с помощью которых можно реализовать хоть какое-то «Условное форматирование» в диаграммах Excel.
Условное форматирование с помощью дополнительных столбцов.
Один из вариантов создания такого условного форматирования — расширение основной таблицы. Мы добавляем несколько новых столбцов, в каждый из которых будут отбираться наши основные значения, в зависимости от выполнения того или иного условия. Далее, строим новую диаграмму, где источником данных будут являться все наши второстепенные столбцы. В настройках таблицы включаем стопроцентное перекрытие рядов и для каждого из ряда выбираем свой цвет.
На словах, возможно, звучит немного запутанно, но сейчас все покажу на примере.
Зеленым выделена наша основная таблица с данными. Справа от нее — 4 столбца, по которым распределяются исходные значения, в зависимости от попадания в определенный диапазон:
- Значения менее 3000. Формула в ячейке C2: =ЕСЛИ(B2<3000;B2;НД())
- Значения более 3000, но менее 5000. Формула в ячейке D2: =ЕСЛИ(И(B2>=3000;B2<5000);B2;НД())
- Значения более 5000, но менее 7000. Формула в ячейке E2: =ЕСЛИ(И(B2>=5000;B2<7000);B2;НД())
- Значения более 7000. Формула в ячейке F2: =ЕСЛИ(B2>=7000;B2;НД())
Если значение не попадает в какой-либо диапазон, то в соответствующем столбце выводится ошибка #Н/Д. Это нужно для того, чтобы «неправильные» значения не отображались на диаграмме. Если вам мешаются ячейки с #Н/Д, то могу предложить несколько вариантов:
- Включить классическое условное форматирование для ячеек, которое будет изменять цвет шрифта ячеек с ошибками на белый. Таблица будет выглядеть опрятнее.
- После построения диаграммы, скрыть столбцы с дополнительной частью таблицы. Изначально, диаграмма не будет отображать скрытые данные, но это решается установкой галочки «Показывать данные в скрытых строках и столбцах» в настройках (при выборе источника данных для диаграммы).
После этого, вставляем новую диаграмму и источником выбираем всю нашу большую таблицу, исключая начальный столбец со значениями (чтобы не было задвоения данных на диаграмме). После этого, как я уже говорил, устанавливаем «Перекрытие столбцов» на 100% и получаем уже готовую таблицу, в которой уже реализовано условное форматирование.
Далее, если Вам необходимо, изменяете ширину столбцов и цвет каждой группы данных (цвет каждого столбца изменять не нужно). Такое условное форматирование динамично: не нужно каждый раз перестраивать дополнительную таблицу, достаточно просто заменить значения в исходной и столбцы все перестроятся и перекрасятся.
Условное форматирование диаграммы с помощью VBA.
Второй вариант — использование макросов VBA. Нравится этот способ мне гораздо больше: не нужно строить лишние таблицы, выбирать новые источники данных в настройках и настраивать «корректный» вывод ошибок с «#Н/Д». Достаточно один раз подготовить код и использовать его по необходимости.
Есть несколько алгоритмов для закрашивания столбцов диаграммы с помощью макросов на VBA , но ниже я приведу пример того, который я считаю наиболее оптимальным и удобным. В нем мы напрямую обращаемся к столбцам диаграммы и соответствующим значениям, не затрагивая сам источник данных (то есть нам не важно, где расположена сама таблица со значениями):
Sub conditional_formatting() Dim X As Object Dim Mass() counter = 1 FirstValue = 700000 'первое число для диапазонов SecondValue = 900000 'второе число для диапазонов If ActiveChart Is Nothing Then 'проверка выделения диаграммы MsgBox "Необходимо выделить нужную Вам диаграмму.", vbInformation + vbOKOnly, "Внимание!" Exit Sub End If For Each X In ActiveChart.SeriesCollection Mass = X.Values n = UBound(Mass) - LBound(Mass) + 1 For i = 1 To n Set ChartColumn = ActiveChart.SeriesCollection(counter).Points(i) If Mass(i) < FirstValue Then ChartColumn.Interior.Color = RGB(255, 0, 0) ElseIf (Mass(i) >= FirstValue And Mass(i) < SecondValue) Then ChartColumn.Interior.Color = RGB(255, 209, 0) Else ChartColumn.Interior.Color = RGB(26, 163, 57) End If Next counter = counter + 1 Next End Sub
Все просто. Данный макрос подсвечивает диаграмму тремя цветами (по типу «Светофор»: красный, желтый и зеленый), в зависимости от принадлежности значения столбца диаграммы к определенному диапазону. Диапазонов, соответственно, тоже три и задаются они с помощью двух переменных: FirstValue и SecondValue (все значения меньше FirstValue, между FirstValue и SecondValue и больше SecondValue). Значения этих переменных задаются в макросе, точно так же, как и цвета.
При запуске данного макроса мы получим следующий результат:
Все столбцы со значением менее 700000 были залиты красным цветом, со значением более 900000 — зеленым, а в диапазоне от 700000 до 900000 — желтым.
Если очень хочется, условное форматирование диаграммы через макрос можно усовершенствовать:
- Добавить еще несколько условий
- Добавить под новые условия новые цвета
- Создать форму VBA, на которой можно будет самостоятельно выбирать цвета через палитру и задавать диапазоны условий, не изменяя код
Также, на лист с диаграммой можно добавить обработку события (автоматическое выполнение кода при определенном действии пользователя), которое будет автоматически запускать закрашивание диаграммы, при изменений значений в источнике данных. В таком случае, условное форматирование становится динамичным и отпадает необходимость каждый раз запускать макрос, достаточно просто изменить значение в исходной таблице. В примере, который можно скачать в конце статьи, оно реализовано следующим образом:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:B19")) Is Nothing Then Exit Sub 'это диапазон нашего источника данных MainCell = ActiveCell.Address 'сохраняем адрес выделенной ячейки ActiveSheet.ChartObjects(1).Activate 'выделение первой диаграммы на листе conditional_formatting Range(MainCell).Activate 'выделяем ячейку по сохраненному адресу End Sub
Сначала идет проверка на принадлежность изменяемой ячейки к нужному нам диапазону, затем выделяется диаграмма, а после — диаграмма закрашивается заново. В данном коде выделяется именно первая диаграмма листа, поэтому если диаграмм на листе несколько — в код нужно подставить порядковый номер искомой диаграммы.
Надстройка SHTEM для Excel.
Условное форматирование для диаграммы реализовано пока что только в тестовой версии надстройки SHTEM для Excel: с формой для ввода ограничений и несколькими заданными наборами цветов (в том числе и с градиентом). Сейчас функция тестируется на работоспособность в различных условиях и спустя некоторое время будет добавлена в основную версию надстройки.
Предварительный вариант инструмента условного форматирования диаграмм в тестовой версии надстройки выглядит следующим образом:
Диапазоны для градиента могут заполняться автоматически (числовой ряд будет делиться на 5 равных отрезков). Возможно, чуть изменю цвета и добавлю еще несколько вариантов градиента, а также добавлю возможность выбирать пользовательские цвета из палитры.
Напомню, что скачать надстройку может абсолютно любой желающий: изначально дается тестовый период на 30 дней, а затем, если необходимо, я могу выдать вам код для активации неограниченного доступа.
Условное форматирование: заключение.
Если Вы часто формируете диаграммы, где столбцы должны быть залиты разными цветами, в зависимости от их значения — перечисленные способы безусловно вам подойдут. «Гибкими» их, конечно, не назовешь, но в любом случае, это лучше, чем ручная заливка каждого из столбцов. Если Вам известны какие-нибудь другие способы условного форматирования диаграммы или просто хотите дополнить мою статью — пишите об этом в комментариях, обязательно все прочитаю. А скачать файл с реализацией перечисленных здесь способов заливки диаграммы, можно нажав на кнопочку ниже:
Условное форматирование для диаграмм: скачать пример
Skip to content
Как привязать график к определенному диапазону
На чтение 2 мин. Просмотров 2.1k.
Что делает макрос: Этот макрос помогает легко привязать ваш график к определенному диапазону и получать идеальное позиционирование каждый раз.
Содержание
- Как макрос работает
- Код макроса
- Как использовать
Как макрос работает
Каждая диаграмма имеет четыре свойства, которые диктуют его размер и положение. Эти свойства: Width, Height, Top и Left. Интересно, что каждый объект Range имеет те же свойства. Так что, если вы установили диаграмме свойства, совпадающее с определенным диапазоном, диаграмма по существу привязывается к этому диапазону.
В этом примере мы регулируем четыре диаграммы так, что их
Width, Height, Top и Left свойства соответствуют заданному диапазону.
Обратите внимание, что мы отождествляем каждую таблицу с именем. Графики, по умолчанию, под названием «Диаграмма» и номер под которым они были добавлены (таблица 1, график 2, график 3, и т.д.). Вы можете увидеть, как каждая из ваших диаграмм называется, нажав любую диаграмму, а затем перейдя на ленту и выберите Format➜Selection Панель. Это активирует панель задач, в котором перечислены все объекты на листе с их именами.
Код макроса
Sub PrivyazatGrafikKDiapazonu() Dim SnapRange As Range Set SnapRange = ActiveSheet.Range("B6:G19") With ActiveSheet.ChartObjects("Диаграмма 1") .Height = SnapRange.Height .Width = SnapRange.Width .Top = SnapRange.Top .Left = SnapRange.Left End With Set SnapRange = ActiveSheet.Range("B21:G34") With ActiveSheet.ChartObjects("Диаграмма 2") .Height = SnapRange.Height .Width = SnapRange.Width .Top = SnapRange.Top .Left = SnapRange.Left End With Set SnapRange = ActiveSheet.Range("I6:Q19") With ActiveSheet.ChartObjects("Диаграмма 3") .Height = SnapRange.Height .Width = SnapRange.Width .Top = SnapRange.Top .Left = SnapRange.Left End With Set SnapRange = ActiveSheet.Range("I21:Q34") With ActiveSheet.ChartObjects("Диаграмма 4") .Height = SnapRange.Height .Width = SnapRange.Width .Top = SnapRange.Top .Left = SnapRange.Left End With End Sub
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Excel — это очень полный инструмент, когда дело доходит до ручного управления его функциями, но, с другой стороны, создание диаграммы с использованием Макросы VBA позволяет вставлять в электронную таблицу более динамический контент.
Хотя многие пользователи не подозревают об их полезности, макросы позволяют выполнять любую сложную работу, которую необходимо выполнять вручную.
Основная задача этого помощника — автоматизировать задачи которые сохраняются, чтобы их можно было быстро вставить в случае необходимости.
Изучение языка VBA необходимо для достижения этого типа создания, потому что знание объектов График et ChartObject поможет вам понять.
Excel предлагает множество инструментов и опций, которые сделают вашу работу быстрее и проще. Одним из инструментов, с которым вы, возможно, не знакомы в этой программе, является возможность оформления динамического стола.
ChartObjects — это коллекция, которая находится на листах Excel , поэтому он начнется с объекта ChartObject, которого может быть несколько; он должен отличаться следующим индексом: » Объект диаграммы (i) .
Этот объект будет отвечать за содержание графа или известен на этом языке под именем Chart, который управляется иерархией:
- Приложение> Рабочая книга> Рабочая таблица> ChartObject> Диаграмма> ChartTitle (пример для определения объекта, который находится внутри рисунка).
Это считается наиболее важной частью диаграммы, знание которой необходимо для создания кода VBA диаграммы, который вы запомните на рабочем листе.
Важно помнить, что в макросе некоторые из этих аспектов могут стать объектами, чтобы вы могли понять код, который вы пишете.
Пошаговое создание кода макроса для диаграммы
Пример, который будет использован в этой статье для создания графика с использованием макросов VBA, будет говорить об осадках за год в определенной области, и он будет отображаться в виде столбцов.
Для начала будут использованы два листа программы Microsoft Excel, где первый будет называться » Графический «И второй будет назван» Данные .
нажмите Прикосновения « Alt + F11 » открыть Визуальный Бейсик редактор чтобы выбрать книгу в проводнике проекта.
В меню редактора выберите опцию » вставить «Нажать на» Модули «, А там вы напишете код для своей графики. В данном случае это так:
- Sub GD Rain () Dim Rain как ChartObjectSet Rain = Sheets («График»). ChartObjetcts.Add (Слева: = 300, Сверху: = 0,
Ширина: = 300, Высота: = 200) — Здесь верхнее и левое края основаны на верхнем левом поле листа. С Rains Chart.SetSourceData Source: = Sheets («Data»). Диапазон («A1: B13») — это источник данных .. ChartType = xlColumnClustered — Тип диаграммы..Legend.Delete — Было решено удалить легенду из данных.
Конец с
End Sub
Поскольку в этом примере есть только один набор данных, решено удалите подпись, так как это может нарушить качество глобальный и интервал графа.
рекомендации
Если тип диаграммы, которую вы хотите создать, содержит несколько рядов данных; Рекомендуется использовать легенды, так как они помогут определить цвета и формы каждой из введенных данных.
Аналогичным образом для добавлять несколько столбцов в качестве информации, вам просто нужно охватить весь диапазон, который они занимают при определении данных в коде.
Если, с другой стороны, вы хотите изменить цвета полосок, вы должны добавить код » .SeriesCollection (1) .Format.Fill.ForeColor.RGB = RGB (0, 170, 171). » к вашему макросу .
Это должно быть помещено между словами » С «И» Конец с . В примере было решено разместить полосы изумрудного цвета, но если вы хотите разместить другой тип цвета, вам просто нужно разместить числовой код языка VBA.
Одно из больших преимуществ этого метода — возможность записывать закодированные макросы для последующего повторного использования.
Важно не только правильно создать диаграмму, но и создать легенду который помогает вам идентифицировать и различать разделы вашей диаграммы.
Создаваемые вами диаграммы можно создавать по своему усмотрению, в Excel есть инструмент, позволяющий круговые диаграммы. Когда ваша диаграмма будет завершена в Excel, вы можете конвертировать в файл TIFF.