Yandex.Метрика

Условное форматирование в диаграммах Excel

Условное форматирование в диаграммах Excel.

Изучая статистику по коронавирусу (актуальному на момент написания статьи), я зашел на информационную страницу Яндекса с данными по заболеваниям и выздоровлениям и обнаружил там довольно интересную диаграмму:

Условное форматирование: диаграмма YandexЗаинтересовало меня то, что цвет столбца изменяется в зависимости от соответствующего значения. И чем больше это значение, тем сильнее «краснеет» цвет столбца диаграммы. То есть, грубо говоря, это — условное форматирование столбцов диаграммы, где условие — принадлежность числового значения самого столбца к некоторому диапазону.

Мне захотелось реализовать что-то подобное в 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;НД())

Если значение не попадает в какой-либо диапазон, то в соответствующем столбце выводится ошибка #Н/Д. Это нужно для того, чтобы «неправильные» значения не отображались на диаграмме. Если вам мешаются ячейки с #Н/Д, то могу предложить несколько вариантов:

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

После этого, вставляем новую диаграмму и источником выбираем всю нашу большую таблицу, исключая начальный столбец со значениями (чтобы не было задвоения данных на диаграмме). После этого, как я уже говорил, устанавливаем «Перекрытие столбцов» на 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). Значения этих переменных задаются в макросе, точно так же, как и цвета.

При запуске данного макроса мы получим следующий результат:

Условное форматирование: результат выполнения макроса VBAВсе столбцы со значением менее 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: с формой для ввода ограничений и несколькими заданными наборами цветов (в том числе и с градиентом). Сейчас функция тестируется на работоспособность в различных условиях и спустя некоторое время будет добавлена в основную версию надстройки.

Предварительный вариант инструмента условного форматирования диаграмм в тестовой версии надстройки выглядит следующим образом:

Условное форматирование в надстройке для Excel

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

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

Условное форматирование: заключение.

Если Вы часто формируете диаграммы, где столбцы должны быть залиты разными цветами, в зависимости от их значения — перечисленные способы безусловно вам подойдут. «Гибкими» их, конечно, не назовешь, но в любом случае, это лучше, чем ручная заливка каждого из столбцов. Если Вам известны какие-нибудь другие способы условного форматирования диаграммы или просто хотите дополнить мою статью — пишите об этом в комментариях, обязательно все прочитаю. А скачать файл с реализацией перечисленных здесь способов заливки диаграммы, можно нажав на кнопочку ниже:

Условное форматирование для диаграмм: скачать пример

6 комментариев

  1. Олег Аксенов 04.09.2020
    • HeinzBr 04.09.2020
  2. Милана 07.09.2020
    • HeinzBr 08.09.2020
  3. Татьяна 06.02.2022

Reply Cancel Reply