我见过一些使用Arrow to Indicate Special Points on Excel chart like this的例子。但我想用VBA实现这一目标。例如,如果图表上的某个点大于90,那么它会显示与该点对应的箭头。
请建议我应该如何在VBA中解决这个问题。任何帮助,将不胜感激。
更新
除了改变点颜色之外,还有其他任何好的建议可以使这一点更加突出。
更新2
现在我正在使用此代码。
For Each oCell In Range("e4:e" & LastRow) 'loop
If oCell.Value < sd13 Then 'rule 13s
Range("V4").Value = "Rule 13s voilated!"
Range("V4:w4").Interior.Color = RGB(255, 0, 0)
ActiveWorkbook.Sheets("LDL-C").ChartObjects("Chart 1047").Chart.SeriesCollection(1).Points(j).MarkerBackgroundColor = RGB(255, 0, 0)
End If
Next
答案 0 :(得分:2)
除了改变点颜色之外,还有其他任何好的建议可以使这一点更加突出。
这会有帮助吗?
With ActiveChart
For i = 1 To .SeriesCollection.Count
a = .SeriesCollection(i).Values
For l = 1 To .SeriesCollection(i).Points.Count
If mymax < a(l) Then
mymax = a(l)
.SeriesCollection(i).DataLabels.Select
Selection.Format.Line.Visible = msoTrue
Selection.Format.Line.Visible = msoFalse
.SeriesCollection(i).Points(l).DataLabel.Select
.SeriesCollection(i).Points(l).Select
.SeriesCollection(i).DataLabels.Select
.SeriesCollection(i).Points(l).DataLabel.Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
End With
With Selection.Format.Line
.Visible = msoTrue
.Weight = 2
End With
End If
Next l
Next
End With
<强>快照强>
另一个快照
答案 1 :(得分:1)
不确定如何使用箭头,但这是一种只改变感兴趣点颜色的方法:
With ActiveSheet.ChartObjects(ChartName).Chart.SeriesCollection("NCDs")
For currentPoint = 1 To .Points.Count
If Range("G" & currentPoint + 34).Value = True Then
With .Points(currentPoint).Format
.Fill.BackColor.RGB = RGB(50, 150, 50)
.Fill.ForeColor.RGB = RGB(50, 150, 50)
.Line.ForeColor.RGB = RGB(50, 150, 50)
End With
Else
With .Points(currentPoint).Format
.Fill.BackColor.RGB = RGB(150, 50, 50)
.Fill.ForeColor.RGB = RGB(150, 50, 50)
.Line.ForeColor.RGB = RGB(150, 50, 50)
End With
End If
Next currentPoint
End With
只需更改名称和条件条款...... 也许.Points(currentPoint)对象具有x,y位置属性,您可以使用它们来定位箭头。虽然不确定,但这似乎是一个很好的起点。
答案 2 :(得分:1)
是的,必须有VBA。 VBA的问题在于,有人必须记住要运行该过程或设置一个Worksheet_Calculate事件或其他任何事情,因此,当数据不可避免地发生变化时,图表会跟上数据。
这是我的非VBA方法,该方法依赖于Excel公式。
简单数据,由Siddharth在他的回答中提供。我添加了一个列,称为MAX。复制到C11中的单元格C2中的公式为
=IF(B2=MAX(B$2:B$11),B2,NA())
第一个图表在聚簇柱形图中绘制常规数据序列。第二张图表已添加MAX。在第三张图表中,我将“重叠”更改为100%,因此蓝色条形覆盖了相应的灰色条形。下图,我已经向MAX系列添加了数据标签。在上一张图表中,我已经格式化了数据标签以显示系列名称,并且字体颜色=与条形颜色匹配。
因此,这是原始数据和图表(上),以及具有更改的图表的更改的数据(下)。公式完成了所有操作,无需重新运行VBA。
很棒的是,如果我获得并列第一名,那么我会得到两个标有蓝色的条,而无需付出额外的努力。
添加一个第三系列来表示MIN并不是很大。
答案 3 :(得分:-1)
ActiveChart.FullSeriesCollection(1).Select
With Selection
.MarkerStyle = 8
.MarkerSize = 5
End With
Selection.MarkerStyle = 2
ActiveChart.ChartArea.Select
With Selection.Format.Line