Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » VBAでグラフのデータラベル位置を取得する

VBAでグラフのデータラベル位置を取得する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2105 ビルド14026.20308 Microsoft Store)

Excelでグラフのデータラベルの位置を指定

Excel VBAでグラフに関わるオブジェクトは大量に存在します。

そんなグラフ操作に関連して
「excel グラフ データラベル マクロ activechart datalabel 位置 取得」
といった検索キーワードでアクセスがありました。

[スポンサードリンク]

データラベルの位置を取得する基本

グラフを選択しておいてから、以下のSubプロシージャを実行してみてください。

Sub データラベルの位置を取得する_基本()
 Dim srs As Series
 For Each srs In ActiveChart.SeriesCollection
  If srs.HasDataLabels Then
   Debug.Print _
     srs.Name & vbTab & srs.DataLabels.Position
  End If
 Next
End Sub

データラベルが表示されている系列の、系列名(Series.Name)とデータラベルの位置を表すXlDataLabelPosition列挙に定義されている数値(DataLabels.Position)が、イミディエイトウィンドウに出力されます。

SeriesCollectionコレクションに対して、For Each~Nextループを回して、

Dim srs As Series
For Each srs In ActiveChart.SeriesCollection

データラベルが表示されているときに、

If srs.HasDataLabels Then

系列名と、データラベルの位置を表す数値を出力しています。

 Debug.Print _
   srs.Name & vbTab & srs.DataLabels.Position

個々のデータラベルの位置を取得する

データラベルの位置を、個別に手作業で移動してしまっているケースもありそうです。そのような場合、以下のSubプロシージャです。

Sub データラベルの位置を取得する()
 Dim srs As Series
 For Each srs In ActiveChart.SeriesCollection
  If srs.HasDataLabels Then
   Debug.Print srs.Name

   On Error Resume Next
   Dim lbl As DataLabel
   For Each lbl In srs.DataLabels
    Debug.Print lbl.Position
    If Err.Number = -2147467259 Then
     Debug.Print "データラベルなし"
     Err.Clear
    End If
   Next lbl
   On Error GoTo 0

  End If
 Next srs
End Sub

先ほどの、SeriesCollectionコレクションに対するFor Each~Nextループの中で、

Dim srs As Series
For Each srs In ActiveChart.SeriesCollection

DataLabelsコレクションに対するFor Each~Nextループを回しています。

 Dim lbl As DataLabel
 For Each lbl In srs.DataLabels

個々のDataLabelオブジェクトには、表示されているかどうか判定に使えそうなプロパティが見当たらないので、

  Debug.Print lbl.Position

で実行時エラーが発生したときに、「データラベルなし」と出力させています。

  If Err.Number = -2147467259 Then
   Debug.Print "データラベルなし"

最終更新日時:2021-09-05 06:54

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » VBAでグラフのデータラベル位置を取得する

「グラフ・Chart」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.