使用VBA指示特殊点的箭头

时间:2012-07-05 07:08:36

标签: excel vba excel-vba charts

我见过一些使用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

4 个答案:

答案 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

<强>快照

enter image description here

另一个快照

enter image description here

答案 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系列添加了数据标签。在上一张图表中,我已经格式化了数据标签以显示系列名称,并且字体颜色=与条形颜色匹配。

Build a Conditional Chart

因此,这是原始数据和图表(上),以及具有更改的图表的更改的数据(下)。公式完成了所有操作,无需重新运行VBA。

Operation of conditional MAX chart

很棒的是,如果我获得并列第一名,那么我会得到两个标有蓝色的条,而无需付出额外的努力。

添加一个第三系列来表示MIN并不是很大。

Operation of conditional MIN and MAX chart

答案 3 :(得分:-1)

ActiveChart.FullSeriesCollection(1).Select
With Selection
    .MarkerStyle = 8
    .MarkerSize = 5
End With
Selection.MarkerStyle = 2
ActiveChart.ChartArea.Select
With Selection.Format.Line