У меня есть диаграмма с рядом, обозначающая большой набор (1000) дискретных измерений. Некоторые из них - плохие измерения, и я хочу раскрасить линию для серии на основе другого набора данных, который описывает, насколько точны измерения. Плохие измерения должны быть красными, а хорошие - зелеными, а промежуточные - каким-то градиентом от красного к желтому и зеленому.
Это должно быть запрограммировано с помощью VBA, но я понятия не имею, что делать. Кто-нибудь может мне подсказать?


Вы заперты на VBA? Один из способов сделать это - открыть архив документов OOXML .xlsx (на самом деле это Zip-архив). Тогда у вас будет свободный доступ к данным XML, из которых состоит сам документ. Его можно запустить с помощью таблицы стилей XSL или любого другого сценария по вашему выбору, а затем повторно заархивировать.
Раскрасить линию диаграммы в VBA достаточно просто. Вот несколько примечаний.
Dim cht As Chart
Dim sc As Series
Dim blnBad As Boolean
Dim j
j = 85 'RGB orange '
blnBad = False
'This is a chart called Chart 1, it would be possible '
'to use the charts collection '
Set cht = ActiveSheet.ChartObjects("Chart 1").Chart
'A chart is composed of series of data ... '
For Each sc In cht.SeriesCollection
' ... that you can iterate through to pick up '
' the individual data values, or a data range. '
' Values in this case. '
For i = LBound(sc.Values) To UBound(sc.Values)
' That can be checked against another set of '
' values in the range Bad. '
With ActiveSheet.Range("Bad")
' So, look for the value ... '
Set c = .Find(sc.Values(i), lookat:=xlWhole, LookIn:=xlValues)
' and if it is found ... '
If Not c Is Nothing Then
' ... then set the Bad flag '
blnBad = True
End If
End With
Next
' So, this range contains a Bad value '
' and we will colour it red ... '
If blnBad Then
sc.Border.Color = RGB(255, 0, 0)
' ... not forgetting the markers '
sc.MarkerForegroundColor = RGB(255, 0, 0)
Else
' Otherwise, use an increasingly yellow colour '
sc.Border.Color = RGB(255, j, 0)
sc.MarkerForegroundColor = RGB(255, j, 0)
j = j + 30 ' getting more yellow
' Debug.Print j ' uncomment to see j in the immediate window '
End If
blnBad = False
Next
End Sub
Спасибо, не могли бы вы очень кратко описать, что это делает? Что должно быть в «плохом» диапазоне?
Плохой диапазон в образце содержал список значений, которые можно сопоставить с каждым значением в серии. Ваша настройка, вероятно, отличается, но у меня нет достаточной информации.
Спасибо за описание. Настройка, к которой я стремлюсь, немного отличается - я хочу построить один диапазон, назовите его «rangeValues», но я хочу, чтобы цвет линии изменился со значением в другом диапазоне «rangeError». По сути, разноцветная серия. :)
Спасибо, я этого не осознавал. Я это проверю.