Excel VBA仅显示每个系列的最大值的标签

时间:2013-05-24 10:25:17

标签: excel vba excel-vba charts

我正在尝试创建一个宏,它在图表中循环遍历系列,并且只显示最大/最小标签,取决于最大/最小值。

某些系列只会有负值,在这些情况下,我希望只显示最小数据点标签,反之亦然,对于具有0或更大值的系列。

我到目前为止的代码是:

Sheets("Curve").ChartObjects("Chart 14").Activate
For Each serie In ActiveChart.SeriesCollection
        Dim pointCount As Integer
        Dim pointValues As Variant
        pointCount = serie.Points.Count
        pointValues = serie.Values
        For pointIndex = 1 To pointCount
          If pointValues(pointIndex) < 1000 Then
            serie.Points(pointIndex).HasDataLabel = True
          End If
        Next pointIndex
      Next serie
End Sub

当我手动输入阈值时,哪个工作正常,但我想更换&#39; 1000&#39;而使用Max(系列)值,以便图表中的每个系列只有一个标签可见。

2 个答案:

答案 0 :(得分:1)

以下修改的例程包括MaxPoint,MaxPointIndex,MinPoint和MinPointIndex变量,这些变量在每个系列点的For循环中计算。然后,如果系列只有正值和最小点,则设置最大点的标签。

  Option Explicit

  Sub chart()
  Dim serie As Variant
  Dim Pointindex As Long
  Dim MaxPoint As Long
  Dim MaxPointIndex As Long
  Dim MinPoint As Long
  Dim MinPointIndex As Long
  Sheets("Curve").ChartObjects("Chart 14").Activate
  For Each serie In ActiveChart.SeriesCollection
      Dim pointCount As Integer
      Dim pointValues As Variant
      pointCount = serie.Points.Count
      pointValues = serie.Values
      MinPoint = 10000              'set to value greater than any point in any serie
      MaxPoint = 0
      For Pointindex = 1 To pointCount
          If pointValues(Pointindex) > MaxPoint Then
              MaxPoint = pointValues(Pointindex)
              MaxPointIndex = Pointindex
          ElseIf pointValues(Pointindex) < MinPoint Then
              MinPoint = pointValues(Pointindex)
              MinPointIndex = Pointindex
          End If
      Next Pointindex
      If MinPoint >= 0 Then
          serie.Points(MaxPointIndex).HasDataLabel = True
      Else
          serie.Points(MinPointIndex).HasDataLabel = True
      End If
  Next serie
  End Sub

答案 1 :(得分:1)

我有另一种方法,它不需要VBA。它增加了一个额外的系列,最大的不可见数据点,这一点有一个数据标签。如果数据发生变化且不同点最大,它也会动态变化,而不必重新运行VBA过程。

对于图表中的每个系列,您需要使用与系列的Y值相同的范围。

假设给定系列的原始Y值在D2:D10中,我们将使用G2:G10作为我们的额外数据。在G2进入 = IF($ D2 = MAX($ d $ 2:$ d $ 10),$ D2,NA()) 并将其填写到G10。修改此公式,以便在一切都为负数的情况下,您可以改为寻找最小值。

复制G2:G10并在选择此系列的X值时保持CTLR。复制。选择图表,使用“选择性粘贴”,然后选择“在第一列中的列,类别中添加数据作为新系列。”

选择添加的系列,即一个点(除非最多有两个点),格式为没有线,没有标记。将您的数据标签添加到此系列中。

重复图表中的其他系列。