• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003 円グラフのデータラベル)

エクセル2003 円グラフのデータラベル

このQ&Aのポイント
  • エクセル2003を使用して円グラフを作成しています。データラベルには%の値を記載しており、内部外側に配置していますが、データラベルが重なってしまう問題が発生しています。
  • 小さな値が並ぶ場合、円グラフのデータラベルが重なる問題が発生しています。データラベルは内部外側に配置されており、グラフが小さくなることを避けるために配置を変更することができません。
  • エクセル2003で円グラフのデータラベルを使用していますが、小さな値が並ぶ場合にデータラベルが重なってしまいます。内部外側に配置されているため、グラフが小さくなることを避けるために他の解決策を探しています。

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

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

文字数とフォントサイズでやってみました。 Dim dlabe As DataLabel Dim lft As Single Dim wid As Single Dim i As Long With ActiveChart.SeriesCollection(1) For i = 1 To .Points.Count - 1 If Val(.DataLabels(i).Text) < 10 Then wid = (Len(.DataLabels(i).Text) + 1) * .DataLabels(i).Font.Size lft = .DataLabels(i).Left + wid / 2 If lft > .DataLabels(i + 1).Left Then With .DataLabels(i + 1) .Left = lft - 2 '★、数値の2は補正値 End With End If End If Next i End With

style69
質問者

お礼

データラベルが綺麗にずれる様になりました!!! 丁寧な回答ありがとうございます! 本当に助かりました!!

その他の回答 (3)

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

≫回答(2) この回答への補足 >ポインタを合わせると、dlabe.Text ="36%" と表示され、・・・ ということは、データラベルの内容は%値だけということですか? %値だけならSplit関数は必要ありません。 If Val(Split(dlabe.Text, ",")(1)) < 10 Then を If Val(dlabe.Text) < 10 Then に変えてください。 ≪参考≫ Split関数で文字列を区切る http://www.officetanaka.net/excel/vba/tips/tips62.htm

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

データラベルの表示内容で判定 データラベルには、値と%値が表示されていると仮定 10%未満の場合、右方向に移動 移動量は決めてが難しいので取りあえず経験値です。 精度は保障できません。 グラフを選択して置いて実行してください。 Dim dlabe As DataLabel Dim flg As Boolean Dim i As Long For Each dlabe In ActiveChart.SeriesCollection(1).DataLabels If flg = False Then If Val(Split(dlabe.Text, ",")(1)) < 10 Then flg = True End If Else i = i + 1 dlabe.Left = dlabe.Left + 4 * i ^ 1.5 End If Next データラベルの重なり量が解ればいいのですが データラベルには、Width、Heightプロパティがありません。 従って直接、重なり量を取ることは難しいです。 文字数×フォントサイズで間接的に近い値が算出できると思います。

style69
質問者

補足

返答ありがとうございます。 丁寧な説明で、どのような手順で重なりを防げば良いのか理解できました。 教えて頂いたコードを実行してみたのですが、「インデックスが有効範囲にありません。」とのメッセージが出てしまい、デバッグすると、 If Val(Split(dlabe.Text, ",")(1)) < 10 Then の行が黄色く表示されました。 ポインタを合わせると、dlabe.Text ="36%" と表示され、一つ目のデータラベルの値を拾っている様子が窺えます。 私自身も、VBAの言語を紐解きながら試行錯誤しているのですが、宜しければ、ご教授願えませんでしょうか。

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

何を目指しているのか判らない。後の読者のために、私の誤解している点を指摘・補足して置いてください。 ーー 自動で重ならないというサービスはエクセルには無いのでは。 普通手動でデータラベルの位置をマウスで多少移動するのでは。 円グラフはデータ数も実質上小数に限られているので、動かすのは2,3系列では? 何を目指しているのか判らない。 データラベルの移動はマクロの記録を採ると ActiveChart.SeriesCollection(1).DataLabels.Select ActiveChart.SeriesCollection(1).Points(5).DataLabel.Select Selection.Left = 159 Selection.Top = 27 になるが、こういうのも勉強してみましたか。 具体的に、上記で言う159や27は書く前から(ダブらないようにと)割り出すのは、試行錯誤以外難しいのでは。 円グラフでは「引き出し線を表示する」が使えるので、何処のことを指しているかは、やや示しやすいのでは。 それにデータ例ぐらい質問異書いて質問のこと。 a 60 b 23 c 2 d 3 e 2  のように飛び離れて大と小数がひしめく状態のことか。

style69
質問者

補足

回答ありがとうございます。 質問時の情報不足失礼しました。 補足させて頂きます。 >何を目指しているのか判らない。    データシートに入力した数値を、自動で別シートのグラフに反映させる。  物量が多いため、手動の手間は出来るだけ避けたい。 >自動で重ならないというサービスはエクセルには無いのでは。 >普通手動でデータラベルの位置をマウスで多少移動するのでは。  それをマクロで何とか出来ないものかと、試行錯誤しております。 >円グラフはデータ数も実質上小数に限られているので、動かすのは2,3系列では?  グラフが、100個以上になるので、全て手動だと手間が掛かる為、自動で出来ないかと、試行錯誤しております。 >データラベルの移動はマクロの記録を採ると >ActiveChart.SeriesCollection(1).DataLabels.Select >ActiveChart.SeriesCollection(1).Points(5).DataLabel.Select >Selection.Left = 159 >Selection.Top = 27 >になるが、こういうのも勉強してみましたか 現在、格闘中です。 >円グラフでは「引き出し線を表示する」が使えるので、何処のことを指しているかは、やや示しやすいのでは。  スペースの問題で、数値を外部に出して「引き出し線を表示する」と場所をとる為、数値は内部に納めたいです。 >a60 >b23 >c2 >d3 >e2 >のように飛び離れて大と小数がひしめく状態のことか。  データは流動的な為、必ずしもひしめくとは限りませんが、ひしめく可能性もあるのです。  以下、具体的なデータ例です。     総来客数 3288名  【男性18~40歳】35.9% 1180名  【男性41~60歳】32.6% 1071名  【男性61歳~ 】11.6% 382名  【女性18~40歳】18.8% 619名  【女性41~60歳】0.5% 18名  【女性61歳~ 】0.5% 18名   ※この様なデータを、100件超、それぞれグラフ化したいのです。

関連するQ&A