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

しきい値を手動で入力すると問題なく動作しますが、代わりに「1000」を Max(series) 値に置き換えて、チャートの各シリーズに表示されるラベルが 1 つだけになるようにします。

4

2 に答える 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
于 2013-05-24T12:16:29.713 に答える
1

VBA を必要としない別のアプローチがあります。最大で非表示のデータ ポイントを持つ余分なシリーズを追加し、このポイントにはデータ ラベルがあります。また、VBA プロシージャを再実行する必要なく、データが変更されて別のポイントが最大である場合にも動的に変更されます。

グラフの各系列について、系列の Y 値と同じサイズの範囲を使用する必要があります。

特定の系列の元の Y 値が D2:D10 にあると仮定し、追加データに G2:G10 を使用します。G2 に =IF($D2=MAX($D$2:$D$10),$D2,NA()) と入力し、これを G10 まで埋めます。すべてが負の場合に代わりに最小値を探す場合に備えて、この式を変更します。

G2:G10 をコピーし、Ctrl キーを押しながらこのシリーズの X 値を選択します。コピー。グラフを選択し、[形式を選択して貼り付け] を使用して、[列] で [新しいシリーズとしてデータを追加] を選択し、[最初の列] で [カテゴリ] を選択します。

1 つのポイント (最大で 2 つのポイントがある場合を除く) である追加されたシリーズを選択し、線もマーカーも持たないようにフォーマットします。このシリーズにデータ ラベルを追加します。

チャートの他の系列について繰り返します。

于 2013-10-13T19:43:54.237 に答える