• ベストアンサー

円グラフの0%を削除するVBA

お世話になります。 円グラフの0%のラベルを削除するVBAを調べており、 http://support.microsoft.com/kb/142132/ja に掲載されているものを使用しようかと思っています。 扱っているグラフのシートがたくさんあるのですが、"Sheet1"や"グラフ 1"の部分をその都度書き換えないで自動で操作することは可能でしょうか? よろしくお願いします。 Sub ClearLabels() Worksheets("Sheet1").ChartObjects("グラフ 1").Chart.ApplyDataLabels _ Type:=xlShowPercent For Each X In Worksheets("Sheet1").ChartObjects("グラフ 1"). _ Chart.SeriesCollection(1).Points If InStr(X.DataLabel.Text, "0%") > 0 _ And Len(X.DataLabel.Text) = 2 Then X.DataLabel.Delete End If Next End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 こういうことかな? Sub ClearLabels2()   Dim cht As ChartObject   Dim x As Variant   For Each cht In ActiveSheet.ChartObjects     With cht.Chart       If .Type = xlPie Then         .ApplyDataLabels Type:=xlShowPercent         For Each x In .SeriesCollection(1).Points           If InStr(x.DataLabel.Text, "0%") > 0 _             And Len(x.DataLabel.Text) = 2 Then             x.DataLabel.Delete           End If         Next x       End If     End With   Next cht End Sub

kapakapa
質問者

お礼

ありがとうございます。こんな感じにしたかったんです。VBAは全く無知なので、改造するにも苦労してました。助かります。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

マクロの記録をとってみて、1つのグラフ単体で Sub Macro2() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.PlotArea.Select ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _ HasLeaderLines:=True, ShowSeriesName:=False, ShowCategoryName:=False, _ ShowValue:=False, ShowPercentage:=True, ShowBubbleSize:=False ActiveChart.SeriesCollection(1).DataLabels.Select Selection.NumberFormatLocal = "0%;;" End Sub になりました。 "0%;;"でうまく行くように見えましたがダメですか。 >グラフのシートがたくさんあるのですが 質問の重点はこちらにある? それは For Each X In Worksheets("Sheet1").ChartObjects("グラフ 1"). _ で解決できるのですね。

kapakapa
質問者

お礼

マクロの記録でいろいろ改造しようかと思っていたのですが、VBAの知識が全くないので、苦労しています((+_+))。 ご回答頂いた皆さんすごいですね。私ももっと勉強したいです。ご回答ありがとうございました。自分自身勉強になり感謝しております。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

ANo.4のコメントは感違いでした。 再表示されるようにコーディングされていますね。 ただ、書式設定すれば、データ更新の都度、マクロを走らせる必要がない、ということでお勧めだと思います。 どうでしょうか? cht.Chart.SeriesCollection(1).DataLabels.NumberFormatLocal = "0%;;;" スレ汚し、大変失礼しました。

kapakapa
質問者

お礼

ありがとうございます。パワーアップしました。いろいろ方法があってびっくりしています。VBAですごいんですねっ。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

失礼します。 余計なお節介だとは思いますが、 質問にたいする直接の回答は、Wendy02さんから充分以上の御回答が示されたと思います。 ただ、個々のデータラベルを削除すると、元データがゼロ値以外の値に更新された場合、追従して再表示されることがなくなります。 データラベルを再表示するマクロが必要ということになります。その必要がなければ無問題です。 再表示する必要があるなら、umazanpaiさんが言われるように、データラベルの書式設定で対処した方が良いと思います。

kapakapa
質問者

お礼

とりあえずWendy02さんの回答で解決できそうです。元データを更新したときは注意しようかと思ってます。ありがとうございました。

  • umazanpai
  • ベストアンサー率38% (53/137)
回答No.2

ちょっと勘違いみたいです。 ごめんなさい。

kapakapa
質問者

お礼

ご回答ありがとうございます。前回のご回答のやり方も別のグラフで活用できそうです。

  • umazanpai
  • ベストアンサー率38% (53/137)
回答No.1

書式 0%;;; で消えそう。

関連するQ&A

専門家に質問してみよう