我有2张纸,每张约10-20张图。每个图形具有相同的格式,具有相同的系列名称。一个系列称为“预测花费”,另一个系列称为“花费应该是”。当预测支出线超过消费支出线时,我需要标记图表。我想在给定的点上做一个红点。
我尝试通过制作其他数据表并操纵值来尝试使用一系列有条件的技巧,但没有成功。
VBA可能就是解决方案。我从来没有在图表上使用VBA,所以我不知道如何处理。我一直在做研究,但由于我对图表的经验不足,我不知道如何根据我的需要修改代码。
我认为比较2系列的阵列将是答案。然后,这将为每个图表循环,然后为每张图表循环。
我发现这段代码似乎对我有用,但我不明白所引用的是什么。我猜这是假设htere只是一个系列中的一个图表:
Dim chartIterator As Integer, pointIterator As Integer, _
seriesArray() As Variant
For chartIterator = 1 To ActiveSheet.ChartObjects.Count
seriesArray = ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
chart.SeriesCollection(1).Values
For pointIterator = 1 To UBound(seriesArray)
If seriesArray(pointIterator) >= 0 Then
ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
RGB(146, 208, 80)
Else
ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
RGB(255, 0, 0)
End If
Next pointIterator
Next chartIterator
请解释您的答案,以便我能理解并重复。
提前感谢您的时间!
答案 0 :(得分:1)
这似乎对我很好。
Sub tester()
Dim co As ChartObject
For Each co In ActiveSheet.ChartObjects
CheckChart co.Chart
Next co
End Sub
Sub CheckChart(cht As Chart)
Dim s As Series, sForecast As Series, sShould As Series
Dim i As Long
'see if we can find the required series on this chart
For Each s In cht.SeriesCollection
Debug.Print s.Name
If s.Name = "forecast spendings" Then Set sForecast = s
If s.Name = "spendings should-be" Then Set sShould = s
Next s
'series located?
If sShould Is Nothing Or sForecast Is Nothing Then
MsgBox "required series not found!"
Else
'found the series, so compare the point values
'assumes same # of points in both lines
' and same start/end
For i = 1 To sShould.Points.Count
If sForecast.Values(i) > sShould.Values(i) Then
'label point
With sForecast.Points(i)
.HasDataLabel = True
.DataLabel.Position = xlLabelPositionAbove
.DataLabel.Text = "!!!"
.DataLabel.Characters.Font.Color = vbRed
End With
End If
Next i
End If
End Sub