Excel VBAでグラフに関わるオブジェクトは大量に存在します。
そんなグラフ操作に関連して
「excel グラフ データラベル マクロ activechart datalabel 位置 取得」
といった検索キーワードでアクセスがありました。
データラベルの位置を取得する基本
グラフを選択しておいてから、以下の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プロシージャです。
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
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
- Newer:VBAで空白セルの行番号を取得する
- Older:PowerPoint VBAでテキストボックスを中央揃えに
Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » VBAでグラフのデータラベル位置を取得する