Смена цвета маркеров данных на диаграмме в зависимости от значения не применяя условное форматирование, Изменение цвета на диаграмме (не условное форматирование)
Просьба подсказать, есть диаграмма и там данные 50% ; 70% 110%; 99%; 200%
нужно, чтобы метки данных на диаграмме при значении 100% и меньше выделялись красным цветом. Не могу задать код формат, нашел только вот этот код формата :# ##0_ ;[Красный]-# ##0 , но он переводит % в число и окрашивает только отрицательные значения, а мне надо положительные <=100%
Sub Маркеры_в_красный()
If TypeName(Selection) <> "ChartArea" Then
MsgBox "Сначала выделите диаграмму!": Exit Sub
End If
Set c = ActiveChart
For j = 1 To c.SeriesCollection.Count
f = c.SeriesCollection(j).Formula
m = Split(f, ",")
Set r = Range(m(2))
For i = 1 To r.Cells.Count
Debug.Print r.Cells(i, 1).Value
If r.Cells(i, 1).Value < 1# Then
ActiveChart.FullSeriesCollection(j).Points(i).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbRed
Else
ActiveChart.FullSeriesCollection(j).Points(i).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbBlack
End If
Next i
Next j
End Sub
Название: Смена цвета маркеров данных на диаграмме в зависимости от значения не применяя условное форматирование
Sub Маркеры_в_красный()
For k = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(ActiveSheet.ChartObjects(k).Name).Activate
Set c = ActiveChart
For j = 1 To c.SeriesCollection.Count
f = c.SeriesCollection(j).Formula
m = Split(f, ",")
Set r = Range(m(2))
For i = 1 To r.Cells.Count
If r.Cells(i, 1).Value <= 1# Then
ActiveChart.FullSeriesCollection(j).Points(i).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbRed
Else
ActiveChart.FullSeriesCollection(j).Points(i).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbBlack
End If
Next i
Next j
Next k
End Sub
ПыСы Знаю что Activate не комильфо, но как убрать сходу не придумал...
присвоить переменной или With Set c = ActiveSheet.ChartObjects(k)
Или сразу перебирать (не тестил)
Код
Sub Маркеры_в_красный()
Dim r As Range
Dim c, f, j&, i&, clr&
For Each c In ActiveSheet.ChartObjects
For j = 1 To c.SeriesCollection.Count
f = c.SeriesCollection(j).Formula
Set r = Range(Split(f, ",")(2))
For i = 1 To r.Cells.Count
If r.Cells(i, 1).Value <= 1 Then clr = vbRed Else clr = vbBlack
ActiveChart.FullSeriesCollection(j).Points(i).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = clr
Next i
Next j
Next c
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄