[[20170822100858]] 『グラフ内のデータラベルをVBAでいじりたい。』(エビエビ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『グラフ内のデータラベルをVBAでいじりたい。』(エビエビ)

 初めましてエビエビと言います。

 VBA初心者でマクロの記録からちょこちょこいじって
 またはマクロの記録を継ぎ接ぎして
 もしくはネットで転がっているVBA記述を組み込んでいる程度の者です。

 やりたいことは、2種類あるうちの1種類のデータラベルのフォントを
 いじりたいです。
 VBA記述は最後にあります。

 マクロの記録から作成しているのでどこのデータラベルなのかと言うと上手く言えないのですが
 .FullSeriesCollection(2).ApplyDataLabelsの部分です。
 今現在、コメントブロックしているところがエラーになります。
 エラー内容は
 「TextFrame2'メソッドは失敗しました:'ChartFormat'オブジェクト」
 とコメントブロックを解いて動かすと出ます。

 やっている事は
 1)グラフの元になっている数値置き場シートにある
   Range("B8:D11,B13:D16,B18:D21,B23:D26,B28:D31").Selectを使って必要な数値を選び、
 2)グラフを作成し、
 3)マイナスだと先週分との比較が見えにくいので出発を0で合わせた棒グラフにし、
 4)とりあえず全部の棒グラフにデータラベルを表示させて
 ここからはエラーで動かない内容。
 5)マイナスのある棒グラフのデータラベルだけを太字とか文字を大きくとか
   下線とかつけたいなぁ。
 という感じです。

 なお、エラー部分をコメントアウトすればデータラベルの変更以外は
 すべて最後まで動きます。

 あ、私が試したのは、
        .FullSeriesCollection(2).ApplyDataLabels
 にたいして(この***(2)というのがマイナスのある棒グラフなのです)、
        .FullSeriesCollection(2).ApplyDataLabels.Format.TextFrame2.TextRange.Font.Size = 18
        .FullSeriesCollection(2).ApplyDataLabels.TextFrame2.TextRange.Font.Size = 18
        .FullSeriesCollection(2).ApplyDataLabels.TextRange.Font.Size = 18
        .FullSeriesCollection(2).ApplyDataLabels.Font.Size = 18
 などやってみましたが、全てエラーでした。

 お恥ずかしい話ですが、、、
 ええ、VBAの知識は皆無なのでマクロの記録とVBAの中の記述を
 パズルのように組み替えてなんとかここまで来た感じです。
 どうかお叱りにならないでください;;

 どうかどうか解る方、教えてください。


Sub Macro9()
'
' Macro9 Macro
'

'

    Range("B8:D11,B13:D16,B18:D21,B23:D26,B28:D31").Select
    Range("B28").Activate
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    With ActiveSheet.ChartObjects(1)
        .Name = "ヌマエビ大好き"
    End With
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = True
        .ChartTitle.Text = "週毎のヌマエビの増減グラフ 4月分"
        .FullSeriesCollection(1).ApplyDataLabels
        .FullSeriesCollection(2).ApplyDataLabels
'        .FullSeriesCollection(2).Format.TextFrame2.TextRange.Font.Bold = msoTrue
'        .FullSeriesCollection(2).Format.TextFrame2.TextRange.Font.UnderlineStyle = msoUnderlineSingleLine
'        .FullSeriesCollection(2).Format.TextFrame2.TextRange.Font.Size = 18
    End With
    ActiveChart.FullSeriesCollection(1).Select
    Application.CutCopyMode = False
    ActiveChart.Axes(xlValue).Select
    ActiveChart.Axes(xlValue).CrossesAt = 0
    ActiveChart.Axes(xlValue).CrossesAt = ActiveChart.Axes(xlValue).MinimumScale
        Sheets("グラフの元になっている数値置き場").Select
    ActiveChart.Parent.Cut
    ActiveCell.Offset(18, 4).Range("A1").Select
    Sheets("グラフを見せるシート").Select
    ActiveCell.Select
    ActiveSheet.Paste
    ActiveSheet.Shapes("ヌマエビ大好き").ScaleWidth 2.7770833333, msoFalse, _
        msoScaleFromTopLeft
    ActiveSheet.Shapes("ヌマエビ大好き").ScaleHeight 2.2430555556, msoFalse, _
        msoScaleFromTopLeft
End Sub


< 使用 Excel:Excel2016、使用 OS:Windows10 >


Excel2013以降のグラフ機能を利用しているので、手元にExcel2010しかない私には再現できないため、考え方だけ。

まず、1ラベルを With .FullSeriesCollection(1).ApplyDataLabels と End With の2行に分けてみてください。そして、プロパティ変更は、この2行の間で行います。(.Format.TextFrame2.TextRange.Font.Bold = msoTrue 等)

プロパティ変更でエラーになるならば、エラー手前で停止し、ローカルウィンドウを表示。ツリー構造を追ってプロパティ名を探し、これに合うようにコードを書いてみてください。

このグラフは新しいものであり、機能がてんこ盛りになっていて、マクロでいじるには結構難易度が高いのです。 おそらく、Webを探しても、ほとんど情報が出てこないでしょう。 頑張ってオブジェクト解析し、コード化してみてください。
(マクロの自動記録で、Select文を多用したコードが出てくると思いますが、ラベルをいじっている付近のSelectを真似すると、動くかも?)
(???) 2017/08/22(火) 11:16


んー、よく見ると、コメントアウトしてある箇所は、追加したラベルを指定していないようです。1階層追加するだけかも? 試してみてください。
    .FullSeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.Size = 18
(???) 2017/08/22(火) 11:43

 ???さん、ありがとうございました!
 大変返信が遅くなってすみません><

 最初のは、よくわからず、一応やってみたんですが
 最初の教えて頂いたローカルウィンドウの方は、何も値が入ってこなく
 う〜ん。。。ってなっていましたが、
 2番目に教えて頂いたことを下記のようにしたらできました!
        .FullSeriesCollection(2).ApplyDataLabels
        .FullSeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.Bold = msoTrue
        .FullSeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.UnderlineStyle = msoUnderlineSingleLine
        .FullSeriesCollection(2).DataLabels.Format.TextFrame2.TextRange.Font.Size = 18
 こうしました!
 無事動きました!

 本当にありがとうございました!

(エビエビ) 2017/08/22(火) 14:16


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.