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

问题描述 投票:2回答:2

我正在尝试创建一个宏,该宏在图表中循环显示序列,并且仅根据最大/最小值显示最大/最小标签。

其中一些序列将仅具有负值,在这种情况下,我只希望显示最小数据点标签,对于具有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

[当我手动输入阈值时,它可以很好地工作,但是我想用Max(series)值代替'1000',以便图表中的每个系列只有一个可见的标签。

excel vba excel-vba charts
2个回答
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
投票

我有另一种方法,不需要VBA。它添加了一个额外的序列,该序列的最大值处有一个不可见的数据点,并且该点具有数据标签。如果数据更改并且最大不同点,它也会动态更改,而无需重新运行VBA过程。

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

假定给定序列的原始Y值在D2:D10中,我们将使用G2:G10作为额外数据。在G2中输入= IF($ D2 = MAX($ D $ 2:$ D $ 10),$ D2,NA())并将其填入G10。修改此公式,以防万一所有结果均为负数时查找最小值。

复制G2:G10并按住CTRL,同时选择该系列的X值。复制。选择图表,使用选择性粘贴,然后在“列”,“第一列”中的“类别”中选择“将数据添加为新系列”。

选择添加的系列,该系列是一个点(除非最多有两个点),其格式设置为无线且无标记。将数据标签添加到该系列中。

对图表中的其他系列重复。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.