Автоматическое создание диаграмм excel

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

Как быстро создать диаграмму или график

Создайте таблицу, по которой нужно будет создать графическое отображение ее содержимого:

Выручка.

Теперь мы выполним несколько простых действий:

  • создадим гистограмму;
  • изменим на ней размер шрифта;
  • проверим динамическое изменение на графике в зависимости от изменения данных в таблице.

Для начала работы выделите диапазон A1:C4 и выполняйте следующие действия:

  1. Нажмите клавишу F11, после чего у вас автоматически создастся диаграмма на отдельном листе. Так же автоматически активизируется панель инструментов: «Работа с диаграммами»-«Конструктор».
  2. Диаграмма.

  3. Измените тип диаграммы на: «Гистограмма»-«Гистограмма с группировкой».
  4. Гистограмма с группировкой.

  5. Щелкните правой кнопкой мышки по легенде и выберите опцию «Шрифт» в контекстном меню. В появившемся окне укажите больший размер шрифта (например, 12) и нажмите ОК.
  6. Шрифт.

  7. Выберите инструмент «Конструктор»-«Расположение»-«Переместить диаграмму». В появившемся диалоговом окне: «Перемещение диаграммы» выберите опцию «на имеющемся листе», а из выпадающего списка укажите лист где размещена таблица с исходными данными «Лист1» и нажмите ОК.

Перемещение.

График переместился на лист, где находятся его исходные данные. Теперь проверим их связь между собой. Для этого сделайте любые изменения в значениях таблицы. Например, измените размер выручки Магазина 2 в понедельник. После нажатия клавиши Enter график динамически изменяет отображение значений в соответствии с новыми значениями в таблице.

Магазин 2.

Для следующего примера удалите текущий график. Для этого щелкните по графику, чтобы активировать его и нажмите клавишу «DELETE» на клавиатуре.

Примечание. Обратите внимание, что при переносе графика с отдельного листа, сам лист «Диаграмма1» удаляется автоматически.



Как изменить оси в графике Excel

Снова выделите диапазон A1:C4 и нажмите комбинацию горячих клавиш для создания графика ALT+F1. Снова в конструкторе измените тип диаграммы на гистограмму с группировкой. В результате у нас по оси X отображаются магазины, а нужно там отобразить дни недели.

Теперь проследим одну важную особенность автоматического создания диаграмм и графиков:

  1. Удалите текущую гистограмму. Щелкните по ней левой кнопкой мышки и нажмите клавишу «DELETE» на клавиатуре.
  2. Измените таблицу, добавив все рабочие дни недели.
  3. Выделите диапазон A1:F4 и снова нажмите комбинацию клавиш ALT+F1.

Все рабочие дни.

Теперь при создании график поменял значения на осях X и Y. Возникает вопрос, почему так ведет себя Excel? Ответ очень прост: Excel всегда распределяет данные на графике так, чтобы большее количество данных приходилось на ось X, а меньшее – на ось Y соответственно.

Внимание! При необходимости всегда можно вручную задать какие данные на каких осях графика должны находиться. Для этого в конструкторе выберите инструмент «Строка/столбец» или воспользуйтесь инструментом «Выбрать данные».

Оси.

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

Возможности диаграмм и графиков в Excel

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

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

Естественно значительно удобнее читать, понять и воспринять такого рода информацию из графиков, чем из таблиц.

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

Часто-используемые возможности диаграмм и графиков рассмотрим на следующих уроках с полезными, практическими примерами.

Мгновенные диаграммы с помощью быстрого анализа

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

Ваш браузер не поддерживает видео. Установите Microsoft Silverlight, Adobe Flash Player или Internet Explorer 9.

  1. Выделите диапазон ячеек.

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

    Можно также нажать клавиши CTRL+Q.

    экспресс-анализ

  3. Откройте вкладку Диаграммы.

    Диаграммы

  4. Наводите указатель мыши на типы диаграмм для предварительного просмотра, а затем выберите подходящий.

  5. Выберите Дополнительные> Все диаграммы , чтобы увидеть все доступные диаграммы. Поставьте диаграмму в режим предварительного просмотра и на вкладке ОК. 

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Нужна дополнительная помощь?

Gantt Chart is the most commonly used chart in project management. The more general definition of the Gantt chart is that it helps to keep track of the activities against time. Anything plotted against time can be represented in the form of a Gantt chart. For example, a team manager has given different tasks to their team members. Now keeping track of every task manually is a very difficult process but this can be easily achieved by the Gantt charts. With the help of Excel functions and Charts, we can automate the Gantt chart and so the progress of a project. 

Number representation of Date in Excel 

Before learning the Gantt chart in excel, you need to know how to format date in Number format in excel. For example, 3/13/2022 is in the date format and when converted to Number the value will be 44633.00. The use of the Number representation of Date might not seem very useful now, but when we will create a Gantt chart then the use of it will be very clear. Following are the steps: 

Step 1: Given a Date in cell C4. We can see that the format of the cell is a date. 

Given-a-Date-in-cell-C4

Step 2: Go to Home Tab, and select the drop-down menu in the Numbers section. Select the Number data type. 

Select-the-Number-data-type

Step 3:  You can see the value of date 3/13/2022 in number is 44633.00. 

You-can-see-the-value-of-date-in-number

Creating an Automatic Gantt Chart in Excel

Creating an automatic Gantt chart using simple horizontal bar charts. For example, Rohan wants to keep track of the Geeks for Geeks courses he is studying. Given a data set of Geeks for Geeks courses, its start time, and the number of days required to complete a particular course. Create a Gantt chart for it. The chart would be an automatic Gantt chart which changes with a change in the value of Start-Date and Days to Complete

Days-to-Complete-GFG-courses

Step 1: Go to Insert Tab, and in the charts section, click on the bar chart. 

Click-on-the-bar-chart

Step 2: An empty chart is created. 

An-empty-chart-is-created

Step 3: Right Click inside the blank chart. A drop-down appears. Click on Format Chart Area

Click-on-Format-Chart-Area

Step 4: Select Data Source dialogue box appears now click on Add button.

Select-Data-Source

Step 5: An Edit Series dialogue box appears.

Edit-series-dialogue-box

Step 6: In the Series name column. Select cell C5

Select-cell-C5

Step 7: In the Series Values column. Select the range C6:C12. Click Ok. 

Select-the-range-C6:C12-then-click-Ok

Step 8: Start-Date got added. Again click on Add button to add Days to Complete.

Start-Date-got-added

Step 9: The Edit Series dialogue box appears. In the Series name column. Select cell D5.

Select-cell-D5

Step 10: In the Series Values column. Select the range D6:D12. Click Ok

Select-the-range-D6:D12-and-click-Ok

Step 11: Now click on Edit Button to add Geeks for Geeks Courses.

Add-Geeks-for-Geeks-Courses

Step 12: An Axis Labels dialogue box appears. Select the range B6:B12. Click Ok.

Select-the-range-B6:B12-and-click-Ok

Step 13: The Select Data Source dialogue box reappears. Click Ok.

Click-Ok

Step 14: A basic bar chart is created. Now we can figure out there are three problems to converting a bar chart to a Gantt chart. 

  1. The courses appear in reverse order. The Excel Course should be at the top and the Git and Github should be at the bottom.
  2. The Blue Bar Lines should not be there in the Gantt chart.
  3. The earliest date in the given data set is 15-Jan. So the graph should start from 15-Jan but it is starting from 10-Dec. So, you need to remove all the redundant dates.

Solving all the problems one-by-one. 

A-basic-bar-chart-is-created

Step 15: Right-click inside the Y-axis i.e. inside the courses section. A drop-down appears and clicks on Format Chart Area.  

Clicks-on-Format-Chart-Area

Step 16: A Format-Axis dialogue box appears. In the Text Options, check the box Categories in reverse order. Now, all the courses will be reversed. 

Check-the-box-Categories-in-reverse-order

Step 17: The Labels got reversed. 

The-Labels-got-reversed

Step 18: Right Click on the Blue bar charts. A drop-down appears. Click on Format Data Series. 

Right-Click-on-the-Blue-bar-chartsClick-on-Format-Data-Series

Step 19: Format Data Series dialogue box appears. Go to Fill and Line, inside the fill section. Click on No Fill. All the blue bars will disappear. 

Click-on-No-Fill

Step 20: The only work left is to remove the redundant dates from the chart.  

Remove-additional-dates

Step 21: The topic studied at the start of the article i.e. Number representation of Date in Excel will significantly help you to remove the additional dates in the Gantt chart. In the given data set, you can see that the earliest date is 15-Jan. Now, you need to know what is the numerical value for 15-Jan. The value for 15-Jan in excel is 44576.00. Remember this number. 

Add-number-format

Step 22: Now, inside the date section of the chart, right-click on it. Click on Format Axis

Click-on-Format-Axis

Step 23: Format Axis dialogue box appears. In the Text Options section, click on the minimum value. Replace 44540.00 with 44576.00

Replace-44540.00-with-44576.00.

Step 24: An automatic Gantt chart is created. This chart is a dynamic chart that could adjust itself with a change in values in the data set. 

Automatic-Gantt-chart-is-created

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

Рис. 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.

Интерактивная диаграмма

Качественная визуализация большого объема информации – это почти всегда нетривиальная задача, т.к. отображение всех данных часто приводит к перегруженности диаграммы, ее запутанности и, в итоге, к неправильному восприятию и выводам.

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

interactive-chart1.png

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

  • двигаться по оси времени вперед-назад в будущее-прошлое
  • приближать-удалять отдельные области диаграммы для подробного изучения деталей графика
  • включать-выключать отображение отдельных валют на выбор

Выглядеть это может примерно так:

interactive-chart.gif

Нравится? Тогда поехали…

Шаг 1. Создаем дополнительную таблицу для диаграммы

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

interactive-chart2.png

В Excel 2007/2010 к созданным диапазонам можно применить команду Форматировать как таблицу (Format as Table) с вкладки Главная (Home):

interactive-chart3.png

Это даст нам следующие преимущества:

  • Любые формулы в таких таблицах автоматически транслируются на весь столбец – не надо «тянуть» их вручную до конца таблицы
  • При дописывании к таблице новых строк в будущем (новых дат и курсов) – размеры таблицы увеличиваются автоматически, включая корректировку диапазонов в диаграммах, ссылках на эту таблицу в других формулах и т.д.
  • Таблица быстро получает красивое форматирование (чересстрочную заливку и т.д.)
  • Каждая таблица получает собственное имя (в нашем случае – Таблица1 и Таблица2), которое можно затем использовать в формулах.

Подробнее про преимущества использования подобных Таблиц можно почитать тут.

Шаг 2. Добавляем флажки (checkboxes) для валют

В  Excel 2007/2010 для этого необходимо отобразить вкладку Разработчик (Developer), а в Excel 2003 и более старших версиях – панель инструментов Формы (Forms). Для этого:

  • В Excel 2003: выберите в меню Вид – Панели инструментов – Формы (View – Toolbars – Forms)
  • В Excel 2007: нажать кнопку Офис – Параметры Excel – Отобразить вкладку Разработчик на ленте (Office Button – Excel options – Show Developer Tab in the Ribbon)
  • В Excel 2010: Файл – Параметры – Настройка ленты – включить флаг Разрабочик (File – Options – Customize Ribbon – Developer)

На появившейся панели инструментов или вкладке Разработчик (Developer) в раскрывающемся списке Вставить (Insert) выбираем инструмент Флажок (Checkbox) и рисуем два флажка-галочки для включения-выключения каждой из валют:

interactive-chart4.png

Текст флажков можно поменять, щелкнув по ним правой кнопкой мыши и выбрав команду Изменить текст (Edit text).

interactive-chart5.png

Теперь привяжем наши флажки к любым ячейкам для определения того, включен флажок или нет (в нашем примере это две желтых ячейки в верхней части дополнительной таблицы). Для этого щелкните правой кнопкой мыши по очереди по каждому добавленному флажку и выберите команду Формат объекта (Format Control), а затем в открывшемся окне задайте Связь с ячейкой (Cell link).

Наша цель в том, чтобы каждый флажок был привязан  к соответствующей желтой ячейке над столбцом с валютой. При включении флажка в связанную ячейку будет выводиться ИСТИНА (TRUE), при выключении – ЛОЖЬ (FALSE). Это позволит, в дальнейшем, проверять с помощью формул связанные ячейки и выводить в дополнительную таблицу либо значение курса из исходной таблицы для построения графика, либо #Н/Д (#N/A), чтобы график не строился.

Шаг 3. Транслируем данные в дополнительную таблицу

Теперь заполним дополнительную таблицу формулой, которая будет транслировать исходные данные из основной таблицы, если соответствующий флажок валюты включен и связанная ячейка содержит слово ИСТИНА (TRUE):

interactive-chart6.png

Заметьте, что при использовании команды Форматировать как таблицу (Format as Table) на первом шаге, формула имеет использует имя таблицы и название колонки. В случае обычного диапазона, формула будет более привычного вида:

=ЕСЛИ(F$1;B4;#Н/Д)

Обратите внимание  на частичное закрепление ссылки на желтую ячейку (F$1), т.к. она должна смещаться вправо, но не должна – вниз, при копировании формулы на весь диапазон.

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

Шаг 4. Создаем полосы прокрутки для оси времени и масштабирования

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

Полосу прокрутки (Scroll bar) берем там же, где и флажки – на панели инструментов Формы (Forms) или на вкладке Разработчик (Developer):

interactive-chart7.png

Рисуем на листе в любом подходящем месте одну за другой две полосы – для сдвига по времени и масштаба:

interactive-chart8.png

Каждую полосу прокрутки надо связать со своей ячейкой (синяя и зеленая ячейки на рисунке), куда будет выводиться числовое значение положения ползунка. Его мы потом будем использовать для определения масштаба и сдвига. Для этого щелкните правой кнопкой мыши по нарисованной полосе и выберите в контекстном меню команду Формат объекта (Format control). В открывшемся окне можно задать связанную ячейку и минимум-максимум, в пределах которых будет гулять ползунок:

interactive-chart9.png

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

Шаг 5. Создаем динамический именованный диапазон

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

  • Отступом от начала таблицы вниз на заданное количество строк, т.е. отступом по временной шкале прошлое-будущее (синяя ячейка)
  • Количеством ячеек по высоте, т.е. масштабом (зеленая ячейка)

Этот именованный диапазон мы позже будем использовать как исходные данные для построения диаграммы.

Для создания такого диапазона будем использовать функцию СМЕЩ (OFFSET) из категории Ссылки и массивы (Lookup and Reference) — эта функция умеет создавать ссылку на диапазон заданного размера в заданном месте листа и имеет следующие аргументы:

interactive-chart19.png

В качестве точки отсчета берется некая стартовая ячейка, затем задается смещение относительно нее на заданное количество строк вниз и столбцов вправо. Последние два аргумента этой функции – высота и ширина нужного нам диапазона. Так, например, если бы мы хотели иметь ссылку на диапазон данных с курсами за 5 дней, начиная с 4 января, то можно было бы использовать нашу функцию СМЕЩ со следующими аргументами:

=СМЕЩ(A3;4;1;5;2)

interactive-chart10.png

Хитрость в том, что константы в этой формуле можно заменить на ссылки на ячейки с переменным содержимым – в нашем случае, на синюю и зеленую ячейки. Сделать это можно, создав динамический именованный диапазон с функцией СМЕЩ (OFFSET). Для этого:

  • В Excel 2007/2010 нажмите кнопку Диспетчер имен (Name Manager) на вкладке Формулы (Formulas)
  • В Excel 2003 и старше – выберите в меню Вставка – Имя – Присвоить (Insert – Name – Define)

Для создания нового именованного диапазона нужно нажать кнопку Создать (Create) и ввести имя диапазона и ссылку на ячейки в открывшемся окне.

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

interactive-chart11.png interactive-chart12.png

Теперь чуть сложнее – создадим диапазон с именем Euros, который будет ссылаться с помощью функции СМЕЩ (OFFSET) на данные по курсам евро за выбранный отрезок времени, используя только что созданные до этого диапазоны Shift и Zoom и ячейку E3 в качестве точки отсчета:

interactive-chart13.png

Обратите внимание, что перед именем диапазона используется имя текущего листа – это сужает круг действия именованного диапазона, т.е. делает его доступным в пределах текущего листа, а не всей книги. Это необходимо нам для построения диаграммы в будущем. В новых версиях Excel для создания локального имени листа можно использовать выпадающий список Область.

Аналогичным образом создается именованный диапазон Dollars для данных по курсу доллара:

interactive-chart14.png

И завершает картину диапазон Labels, указывающий на подписи к оси Х, т.е. даты для выбранного отрезка:

interactive-chart15.png

Общая получившаяся картина должна быть примерно следующей:

interactive-chart16.png

Шаг 6. Строим диаграмму

Выделим несколько строк в верхней части вспомогательной таблицы, например диапазон E3:G10 и построим по нему диаграмму типа График (Line). Для этого в Excel 2007/2010 нужно перейти на вкладку Вставка (Insert) и в группе Диаграмма (Chart) выбрать тип График (Line), а в более старших версиях выбрать в меню Вставка – Диаграмма (Insert – Chart). Если выделить одну из линий на созданной диаграмме, то в строке формул будет видна функция РЯД (SERIES), обслуживающая выделенный ряд данных:

interactive-chart18.png

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

=РЯД(Лист1!$F$3;Лист1!$E$4:$E$10;Лист1!$F$4:$F$10;1)

на

=РЯД(Лист1!$F$3;Лист1!Labels;Лист1!Euros;1)

Выполнив эту процедуру последовательно для рядов данных доллара и евро, мы получим то, к чему стремились – диаграмма будет строиться по динамическим диапазонам Dollars и Euros, а подписи к оси Х будут браться из динамического же диапазона Labels. При изменении положения ползунков будут меняться диапазоны и, как следствие, диаграмма. При включении-выключении флажков – отображаться только те валюты, которые нам нужны.

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

Ссылки по теме

  • Умные таблицы Excel 2007/2010

Понравилась статья? Поделить с друзьями:
  • Автоматическое создание графика работы в excel
  • Автоматическое содержание в word это
  • Автоматическое содержание microsoft word
  • Автоматическое собирание оглавления в word
  • Автоматическое сложение в excel