Excel устанавливает цвет линейного графика на основе цвета ячеек

Итак, у меня есть набор данных, см. рисунок ниже. введите здесь описание изображения

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

Кто-нибудь может мне помочь? -Тим


person Tim Johnsen    schedule 16.10.2018    source источник
comment
Не могли бы вы рассмотреть макрос VBA для этого. Что делать, если цвет жестко запрограммирован внутри макроса. Мой пример кода, который работал, выглядит следующим образом:   -  person Bharat Anand    schedule 16.10.2018
comment
` ActiveSheet.ChartObjects(Chart 1).Activate ActiveChart.FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0) ActiveChart.FullSeriesCollection(2).Format.Line.ForeColor.RGB = RGB( 0, 255, 0) ActiveChart.FullSeriesCollection(3).Format.Line.ForeColor.RGB = RGB(0, 0, 255)`   -  person Bharat Anand    schedule 16.10.2018


Ответы (1)


Что-то вроде этого может привести вас к большей части пути.

  • Переберите SeriesCollection из Chart и возьмите Formula из каждого Series.
  • Получить ссылку на исходные данные (3-я часть формулы) с помощью Split.
  • Установите ForeColor.RGB каждого Series равным Interior.Color диапазона данных, связанного с ним.

Sub ColorMyChart()
    Dim myChart As ChartObject
    Set myChart = Sheet1.ChartObjects("Chart 1")

    With myChart.Chart
        Dim i As Integer

        For i = 1 To .SeriesCollection.Count

            Dim dataAddress As String
            ' takes a formula like =SERIES(Sheet1!$A$2,Sheet1!$B$1:$K$1,Sheet1!$B$2:$K$2,1)
            ' and returns Sheet1!$B$2:$K$2
            dataAddress = Split(.SeriesCollection(i).Formula, ",")(2)

            Dim dataColor As Long
            ' assumes the data range all has the same color
            dataColor = Sheet1.Range(dataAddress).Interior.Color

            .SeriesCollection(i).Format.Line.ForeColor.RGB = dataColor
        Next i
    End With
End Sub
person BigBen    schedule 16.10.2018