3

我已经看到了一些使用 箭头来指示 Excel 图表上的特殊点的示例,如下所示。但我想使用 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

4 回答 4

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

快照

在此处输入图像描述

另一个快照

在此处输入图像描述

于 2012-07-05T10:01:45.750 回答
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 位置属性,您可以使用它们来定位箭头。虽然不确定,但这似乎是一个很好的起点。

于 2012-07-05T09:05:32.107 回答
1

是的,必须有VBA。VBA 的问题是有人必须记住运行程序,或设置 Worksheet_Calculate 事件或其他任何东西,因此当数据发生变化时,它不可避免地会发生变化,图表会跟上数据。

所以这是我的非 VBA 方法,它依赖于 Excel 公式。

简单的数据,由 Siddharth 在他的回答中提供。我添加了一个列,我称之为 MAX。单元格 C2 中的公式,复制到 C11,是

=IF(B2=MAX(B$2:B$11),B2,NA())

第一个图表在簇状柱形图中绘制常规数据系列。第二个图表添加了 MAX。在第三个图表中,我将重叠更改为 100%,因此蓝色条覆盖了相应的灰色条。下一张图表,我已将数据标签添加到 MAX 系列。在最后一个图表中,我将数据标签格式化为显示系列名称,字体颜色 = 与条形颜色匹配。

建立条件图

所以这里是原始数据和图表(上)和更改后的数据和图表(下)。公式完成了所有工作,无需以某种方式重新运行 VBA。

条件MAX图的操作

很酷的是,如果我有一个并列第一名,我会得到两个标记为蓝色的条,而无需额外的努力。

添加第三个系列来指示 MIN 并不是一件容易的事。

条件 MIN 和 MAX 图的操作

于 2020-01-23T23:17:30.080 回答
-1
ActiveChart.FullSeriesCollection(1).Select
With Selection
    .MarkerStyle = 8
    .MarkerSize = 5
End With
Selection.MarkerStyle = 2
ActiveChart.ChartArea.Select
With Selection.Format.Line
于 2020-01-16T01:50:55.550 回答