Как сопоставить цвет диаграммы и исходных данных

Что делает макрос: При создании информационной панели, вы можете иметь определенные цветовые схемы для различных типов данных. Например, вы можете захотеть, чтобы Северный регион всегда появлялся в определенном цвете, или вы можете захотеть, чтобы некоторые продукты имели цвет товарного знака. Макрос позволяет автоматически менять цвета графика в соответствии с цветом исходного диапазона. Идея заключается в том, что вы можете сопоставить цвет диаграммы и исходных данных, взяв цветовой код ячейки в диапазоне источника, а затем применить те же цвета для каждой соответствующей диаграммы серии. Рисунок дает представление о том, как она работает.

сопоставить цвет диаграммы и исходных данных

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

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

Все карты имеют объект SeriesCollection, который содержит различные серии данных. В этом макросе, мы выполняем цикл через все серии.
В этом случае мы устанавливаем цвет на цвет диапазона источника. Мы определяем диапазон источника для каждой серии и оцениваем формулу. Формула серия содержит адрес диапазона исходных данных. Проходя этот адрес объекта диапазона, мы можем захватить точный
цвет клеток, а затем использовать его в графике

Код макроса

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

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

  1. Шаг 1 объявляет четыре переменные. Мы используем oChart в качестве контейнера памяти для нашего графика, MySeries как контейнер памяти для каждой серии в нашей диаграмме, FormulaSplit для захвата и сохранения диапазона исходных данных и SourceRangeColor для захвата и хранения индекса цвета исходного диапазона.
  2. Этот макрос разработан так, что мы выводим целевой график на основе выбора графика. Другими словами, для запуска этого макроса должна быть выбрана диаграмма. Предполагается, что мы хотим выполнить действие макроса на графике, на котором мы щелкнули. На шаге 2 мы устанавливаем переменную oChart в ActiveChart. Если диаграмма не выбрана, то выдается ошибка. Именно поэтому мы используем On Error Resume Next Statement. Он говорит Excel продолжить макрос, если есть ошибка.
  3. Шаг 3 проверяет, заполняется ли переменная oChart объект диаграммы. Если переменная oChart устанавливается в Nothing, ни один график не был выбран перед запуском макроса. Если это так, то мы говорим пользователю в окне сообщения, а затем выходим из процедуры.
  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. На последнем этапе, мы делаем цикл, чтобы получить следующую серию. После того, как мы прошли через все ряды данных в таблице, макрос заканчивается.

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

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

Оцените статью
Добавить комментарий