|
ドラキー さん、こんばんわ。
>(※当方Excel 2003ユーザーです。)
私もです。
>また、円グラフの横に表示される「凡例」からも、0%であった「B」の項目は表示から消したいと思っております。
>
>既に作成してしまっているグラフとファイルが大量にあることもあり、更に元データをなるべくいじりたくないことから、グラフを作る段階で"0%"の表示を防止するのではなく、直接グラフの表示を修正するようなVBAを作りたいのですが、超初心者ゆえに技量が足りずなかなかうまくいきません。。
アクティブなシート上の埋め込みグラフの系列1で、値が0の時に「既に表示されている」データラベルを削除し、同時に凡例の項目も削除します。
Sub test()
Dim co As ChartObject, sc As Series, pt As Point
Dim II As Long, Imax As Long, Hmax As Long
'
'アクティブなシートが対象
With Application.ActiveSheet
'埋め込みグラフでループ
For Each co In .ChartObjects
With co.Chart
'系列は1
Set sc = .SeriesCollection(1)
'データの数
Imax = sc.Points.Count
'凡例に表示されている数
If .HasLegend = False Then
Hmax = 0
Else
Hmax = .Legend.LegendEntries.Count
End If
End With
'
'削除は後ろからが無難
For II = Imax To 1 Step -1
Set pt = sc.Points(II)
'値がゼロ
If sc.Values(II) = 0 Then
'ラベルがあれば削除
If pt.HasDataLabel = True Then
pt.DataLabel.Delete
End If
'データ数と凡例表示数が一致する時だけ処理
If Hmax = Imax Then
co.Chart.Legend.LegendEntries(II).Delete
End If
End If
Next
Next
End With
End Sub
こんな感じです。
|
|