Столкнулся с необходимостью изменения цвета плашек в диаграмме "дерево" (excel 2016) в соответствии с цветом условного форматирования в дополнительном столбце исходной таблицы. Поиск по интернету привел на дружественный форум, где взял макрос, который однако работает не совсем так, как нужно в стандартных диаграммах (красит в соответствии с цветом самих исходных ячеек, а нужно по доп.столбцу) и совсем не работает с диаграммой "Дерево". В макросах я абсолютный ноль, буду рад любой помощи!
Добрый день!
Столкнулся с необходимостью изменения цвета плашек в диаграмме "дерево" (excel 2016) в соответствии с цветом условного форматирования в дополнительном столбце исходной таблицы. Поиск по интернету привел на дружественный форум, где взял макрос, который однако работает не совсем так, как нужно в стандартных диаграммах (красит в соответствии с цветом самих исходных ячеек, а нужно по доп.столбцу) и совсем не работает с диаграммой "Дерево". В макросах я абсолютный ноль, буду рад любой помощи!Russel
Макрос обращается к диаграмме по имени "Диаграмма 1". Макрос не смотрит связь между точкой и ячейкой, а делает по-другому. Макрос берет из плашки поясняющий текст (он у Вас скрыт, но макрос его отображает: вкладка Конструктор - Добавить элемент диаграммы - Подписи данных). И ищет этот поясняющий текст в столбце "C". И затем берет заливку из найденной строки.
[vba]
Код
Sub Закрасить_плашки()
Dim objChart As Chart, objSeries As Series, objPoint As Point Dim r As Long, lr As Long
Application.ScreenUpdating = False Set objChart = ActiveSheet.Shapes("Диаграмма 1").Chart Set objSeries = objChart.SeriesCollection(1) objChart.ApplyDataLabels xlDataLabelsShowLabel lr = Cells(Rows.Count, "E").End(xlUp).Row For Each objPoint In objSeries.Points If objPoint.HasDataLabel = True Then r = 0 On Error Resume Next r = WorksheetFunction.Match(objPoint.DataLabel.Caption, Range("C1:C" & lr), 0) On Error GoTo 0 If r <> 0 Then objPoint.Format.Fill.ForeColor.RGB = Cells(r, "F").DisplayFormat.Interior.Color End If End If Next objPoint objChart.ApplyDataLabels xlDataLabelsShowLabel, , , , , False Application.ScreenUpdating = True
End Sub
[/vba]
Макрос обращается к диаграмме по имени "Диаграмма 1". Макрос не смотрит связь между точкой и ячейкой, а делает по-другому. Макрос берет из плашки поясняющий текст (он у Вас скрыт, но макрос его отображает: вкладка Конструктор - Добавить элемент диаграммы - Подписи данных). И ищет этот поясняющий текст в столбце "C". И затем берет заливку из найденной строки.
[vba]
Код
Sub Закрасить_плашки()
Dim objChart As Chart, objSeries As Series, objPoint As Point Dim r As Long, lr As Long
Application.ScreenUpdating = False Set objChart = ActiveSheet.Shapes("Диаграмма 1").Chart Set objSeries = objChart.SeriesCollection(1) objChart.ApplyDataLabels xlDataLabelsShowLabel lr = Cells(Rows.Count, "E").End(xlUp).Row For Each objPoint In objSeries.Points If objPoint.HasDataLabel = True Then r = 0 On Error Resume Next r = WorksheetFunction.Match(objPoint.DataLabel.Caption, Range("C1:C" & lr), 0) On Error GoTo 0 If r <> 0 Then objPoint.Format.Fill.ForeColor.RGB = Cells(r, "F").DisplayFormat.Interior.Color End If End If Next objPoint objChart.ApplyDataLabels xlDataLabelsShowLabel, , , , , False Application.ScreenUpdating = True