Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24726 / 76732 ←次へ | 前へ→

【57353】Re:円グラフのデータラベルが0%だった場合にラベルと凡例を削除したい
回答  りん E-MAIL  - 08/8/12(火) 18:32 -

引用なし
パスワード
   ドラキー さん、こんばんわ。

>(※当方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

こんな感じです。
6 hits

【57352】円グラフのデータラベルが0%だった場合にラベルと凡例を削除したい ドラキー 08/8/12(火) 17:31 質問
【57353】Re:円グラフのデータラベルが0%だった場合... りん 08/8/12(火) 18:32 回答
【57401】エラーが出てしまいました; ドラキー 08/8/18(月) 17:03 質問
【57404】Re:エラーが出てしまいました; りん 08/8/18(月) 22:10 発言
【57423】見えないグラフとグラフエリアのサイズ変更 ドラキー 08/8/21(木) 15:20 質問
【57426】グラフエリアのサイズ変更 ドラキー 08/8/21(木) 16:30 発言
【57446】Re:グラフエリアのサイズ変更 りん 08/8/23(土) 21:19 発言
【57470】ありがとうございました! ドラキー 08/8/25(月) 17:50 お礼

24726 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free