我有一个图表,其中包含一系列表示大量(1000 个)离散测量的图表。其中一些是错误的测量值,我想根据另一组描述测量结果准确度的数据为该系列的线条着色。不好的测量值应该是红色的,好的测量值应该是绿色的,并且介于从红色到黄色到绿色的某种渐变之间。
这应该可以用 VBA 编程,但是我不知道该怎么做。谁能给我一些提示?
在 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
您是否被锁定在 VBA 中?实现此目的的一种方法是打开您的 OOXML .xlsx 文档存档(它实际上是一个 Zip 存档)。然后,您可以自由访问构成文档本身的 XML 数据。这可以通过 XSL 样式表或您选择的任何其他脚本运行,然后重新压缩。