01 Что делает макрос
При создании диаграмм, вы можете захотеть применить определенные цветовые схемы для различных типов данных. Например, вы можете захотеть, чтобы Восток всегда появлялся в определенном цвете, или вы можете захотеть, чтобы некоторые продукты имели цвет товарного знака. Макрос позволяет автоматически менять цвета графика в соответствии с цветом исходного диапазона. Идея заключается в том, что вы можете сопоставить цвет диаграммы и исходных данных, взяв цветовой код ячейки в диапазоне источника, а затем применить те же цвета для каждой соответствующей диаграммы. Посмотрите на рисунок, чтобы понять, как работает макрос.
Этот макрос не может захватить цвета, которые были применены с помощью условного форматирования или оформления умных таблиц.
Все диаграммы имеют объект SeriesCollection, который содержит различные серии данных. В этом макросе, мы выполняем цикл через все серии. Мы устанавливаем цвет в соответствии с цветом диапазона источника. Мы определяем диапазон источника для каждой серии и оцениваем формулу. Формула серия содержит адрес диапазона исходных данных. Переходя на этот адрес, мы можем захватить точный цвет клеток, а затем использовать его в графике.
02 Код макроса
Sub
SopostavitCvetDiagrammiIIshodnihDannih()
'Шаг 1: Объявляем переменные
Dim
oChart
As
Chart
Dim
MySeries
As
Series
Dim
FormulaSplit
As
Variant
Dim
SourceRangeColor
As
Long
'Шаг 2: Проверяем, выбран ли график
On
Error
Resume
Next
Set
oChart = ActiveChart
'Шаг 3: Выход из макроса, если график не был выбран
If
oChart
Is
Nothing
Then
MsgBox
"График не выбран."
Exit
Sub
End
If
'Шаг 4: Запуск цикла
For
Each
MySeries
In
oChart.SeriesCollection
'Шаг 5: Получить диапазон исходных данных для целевой серии
FormulaSplit = Split(MySeries.Formula,
","
)(2)
'Шаг 6: Захват цвета в первой ячейке
SourceRangeColor = Range(FormulaSplit).Item(1).Interior.Color
'Шаг 7: Применить окраску к диаграмме
On
Error
Resume
Next
MySeries.Format.Line.ForeColor.RGB =SourceRangeColor
MySeries.Format.Line.BackColor.RGB = SourceRangeColor
MySeries.Format.Fill.ForeColor.RGB = SourceRangeColor
If
Not
MySeries.MarkerStyle = xlMarkerStyleNone
Then
MySeries.MarkerBackgroundColor = SourceRangeColor
MySeries.MarkerForegroundColor = SourceRangeColor
End
If
'Шаг 8: Переход к следующей серии
Next
MySeries
End
Sub
03 Как работает макрос
1. Шаг 1 объявляет четыре переменные. Мы используем oChart в качестве контейнера памяти для нашего графика, MySeries как контейнер памяти для каждой серии в нашей диаграмме, FormulaSplit для захвата и хранения диапазона исходных данных и SourceRangeColor для захвата и хранения индекса цвета исходного диапазона.
2. Шаг 2 добавляет в oChart активную диаграмму. Если диаграмма не выбрана, то выдается ошибка. Именно поэтому мы используем On Error Resume Next Statement. Это говорит Excel продолжить макрос даже в случае ошибки.
3. Шаг 3 проверяет, заполнена ли переменная oChart объектом диаграмма. Если переменная oChart ничего не содержит, значит ни один график не был выбран перед запуском макроса. Если это так, то мы говорим об этом пользователю в окне сообщения, а затем мы выходим из макроса.
4. Шаг 4 запускает цикл через все SeriesCollection. Каждая диаграмма имеет формулу серии. Формула серии содержит ссылки на таблицу и указывает на ячейки, используемые для её создания. Типичная формула серии выглядит следующим образом:
= SERIES(Лист1$F$6, Лист1$D$7:!$D$10,Лист1$F$7:$F$10,2)
Эта формула содержит три аргумента: первый – ссылка на диапазон имени серии, второй – ссылка на диапазон подписей данных, третий – ссылка на значения.
5. Шаг 5 использует функцию Split, чтобы извлечь из диапазона значения рядов данных.
6. Шаг 6 захватывает индекс цвета первой ячейки в диапазоне исходных данных. Мы предполагаем, что первая ячейка будет отформатирована так же, как и все остальные части диапазона.
7. После того, как у нас есть индекс цвета, мы можем применить цвет к различным свойствам серии.
8. На последнем этапе, мы переходим к следующему шагу цикла. После того, как мы прошли через все ряды данных в таблице, макрос заканчивается.
04 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
05 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь