Страницы: 1
RSS
Изменение цвета линии точечной диаграммы в зависимости от значения по оси Y
 
Подскажите, можно ли как-то реализовать условное форматирование к графику? Например, если значение >0.3 по оси ординат, то цвет линии красный, если <=0.3, то зёлёный.
 
Ну я бы искал в этом направлении (сходу условие не придумал...)
Код
Sub Markers()
    ActiveSheet.ChartObjects("Äèàãðàììà 1").Activate
    For I = 1 To ActiveChart.SeriesCollection(1).Points.Count
'    If ActiveChart.SeriesCollection(1).Points(I).Values > 0.3 Then
        With ActiveChart.SeriesCollection(1).Points(I).Format.Line
            .Style = msoLineSingle
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorText1
            .ForeColor.RGB = RGB(0, 255, 0)
            .Transparency = 0
        End With
'    End If
    Next
End Sub 
Изменено: vikttur - 15.10.2021 20:11:45
 
Другой вариант решения
 
Спасибо! Второй вариант лучше, т.к. позволяет обойтись без макросов и нагляднее!
 
Можно в именах держать
По вопросам из тем форума, личку не читаю.
 
Не совсем понял как это реализовано. Не могли бы вы объяснить?
 
Посмотрите в диспетчере имен. Ну и эти имена уже как данные для графика.
Изменено: БМВ - 11.10.2021 08:25:40
По вопросам из тем форума, личку не читаю.
 
Понял, спасибо!
 
БМВ,я очень трудно воспринимаю эти длинные командные строки, посему стараюсь избегать. Особенно если потребуется что то исправить.

Вообще этот метод имеет один большой недостаток - для его работы нужно монотонное изменение значений. Если же значения будут "волной" то получается совсем не красиво (попробуйте заменить в примерах выше последнее значение на, скажем, 2 ...).
Как вариант - раскрашивать не линии, а только маркеры.
 
Цитата
tutochkin написал:
БМВ ,я очень трудно воспринимаю эти длинные командные строки, посему стараюсь избегать. Особенно если потребуется что то исправить.
это оочень не длинная формула.
По вопросам из тем форума, личку не читаю.
 
Ещё есть вот такой вариант. Естественно требует наличия точек на гранинцах разделения

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B2:C26]) Is Nothing Then
    ActiveSheet.ChartObjects("Диаграмма 1").Activate
    For Each icell In [C2:C26]
        ActiveChart.SeriesCollection(1).Points(icell.Row - 1).Select ' Для вертикальных ячеек указок (icell.Row - 1) сдвиг начала отсчёта.
'        ActiveChart.SeriesCollection(1).Points(icell.Column - 2).Select ' Для горизонтальных ячеек указок
        Selection.Format.Line.ForeColor.RGB = RGB(50, 50, 50) ' Перекрашиваю весь график для точек, где не указан цвет
        If icell.Value = 0 Then Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
        If icell.Value = 1 Then Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 255)
        If icell.Value = 2 Then Selection.Format.Line.ForeColor.RGB = RGB(0, 255, 0)
        ' и т.д.
    Next
End If
End Sub



Или просто вызов на кнопку повесить

Код
Public Sub color_graph()
    ActiveSheet.ChartObjects("Диаграмма 1").Activate
    For Each icell In [C2:C26]
        ActiveChart.SeriesCollection(1).Points(icell.Row - 1).Select ' Для вертикальных ячеек указок
'        ActiveChart.SeriesCollection(1).Points(icell.Column - 2).Select ' Для горизонтальных ячеек указок
        Selection.Format.Line.ForeColor.RGB = RGB(50, 50, 50) ' Перекрашиваю весь график для точек, где не указан цвет
        If icell.Value = 0 Then Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
        If icell.Value = 1 Then Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 255)
        If icell.Value = 2 Then Selection.Format.Line.ForeColor.RGB = RGB(0, 255, 0)
        ' и т.д.
    Next
End Sub

Изменено: tutochkin - 15.10.2021 15:50:55
Страницы: 1
Наверх