折れ線グラフの幅を全て変更する

中級VBA

折れ線グラフの幅を全て変更する

「マクロの記録」をヒントにして折れ線グラフの幅を変更するプログラムを書いてみます。
グラフのようなプロパティ名やメソッド名が複雑なものは、「マクロの記録」でコードを書かせて、それをヒントに自分の好きにプログラムを書いていくようすれば楽です。

この記事では「マクロの記録」をどのように参考にすれば良いか考察していきたいと思います。

グラフを用意する

 今回はこのような折れ線グラフを用意しました。値はランダムなのでごちゃごちゃしています。
13本ありますので、1つづつ変更していくのは大変な作業です。

 まずは、適当なグラフを1本だけ幅を変更し、それを「マクロの記録」で読み込ませます。

 変更する前に、「開発」タブから「マクロの記録」を押して記録を開始しておきます。
その後、下のように適当な線を選んで、「データ系列の書式設定」から「線」を選んで「幅」を変更します。

変更出来たらマクロの記録を終了させて、出来上がったマクロを見てみましょう。

マクロを見るには、「Visual Basic」でVBEを開いてください。

「マクロの記録」のコードを見る

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ChartObjects("グラフ 1").Activate   
    ActiveChart.PlotArea.Select       
    ActiveChart.FullSeriesCollection(7).Select
    ActiveChart.PlotArea.Select
    ActiveChart.FullSeriesCollection(7).Select
    With Selection.Format.Line
        .Visible = msoTrue
        .Weight = 3
    End With
    Range("X27").Select
End Sub

 何も変更せずに載せてみました。同じ動作を2回繰り返していたり、余分なプログラムコードも混じっています。「マクロの記録」が残すコードの特徴としては、アクティブにしたり、セレクトしたりという部分が多い点が挙げられます。
 これらの殆どは削除したり統合したりできるので、その辺を見分けられるようになると「マクロの記録」を利用するのに有利です。
 今回は .Weight = 3 の部分が重要で、数値を変えれば線の幅を変更できます。

省略できるプログラムコードを省略

省略できるものは省略していきましょう。1つづつ見ていきます。

.ChartObjects(“グラフ 1”)を汎用的に

まず、ActiveSheet.ChartObjects(“グラフ 1”).Activate  ですが、 
ActiveSheet.ChartObjects(1).Activate  とします。
これは、worksheets()と同じ要領で、グラフ名と何番目かで指定できます。ここは汎用的にグラフ名ではなく、何番目かの序数で指定します。

重複を削除

次に、
ActiveChart.PlotArea.Select
 ActiveChart.FullSeriesCollection(7).Select
の2行は繰り返しているだけなので1つだけ残せばOKです。

不要なプロパティ設定を削除

 その次の、 .Visible = msoTrue ですが、表示・非表示を設定しているのですが、表示のまま変更しないので削除します。

関係ない部分はカット

 最後に、Range(“X27”).Select は単に最後にセルを選択したものが記録されただけなので不要です。これも削除します。

Sub Macro1_manual()
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.FullSeriesCollection(7).Select
    With Selection.Format.Line
        .Weight = 4      '数値を変えて動作を確認する。
    End With
End Sub

 上記のようになりました。.Weight の部分は数値を変えて変化を観察してみましょう。

統合できる部分を統合してみる

 「マクロの記録」では、SelectとSelection、ActivateとActive という部分が良く出てきます。
これはセレクトして、セレクトしたものに何かする。アクティブにして、アクティブになったものに対して何かするというパターンとなります。

 このSelectとSelection、ActivateとActive という部分は自分でプログラムを書く場合は、つなぎ合わせて書いている場合は殆どです。このような統合する部分を見極めるのはある程度経験が必要になります。
 初心者であれば、上記の方法で実務に活かしていくのもアリかと思いますが、オブジェクトのつながりが見えてくると他にも応用が利きますので勉強する価値はあると思います。

SelectとSelectionを統合

Sub Macro1_manual2()
    ActiveSheet.ChartObjects(1).Activate
    With ActiveChart.FullSeriesCollection(7).Format.Line
        .Weight = 5       '数値を変えて動作を確認する。
    End With
End Sub

 SelectとSelection 部分を統合した例です。.FullSeriesCollection(7)の後に .Format.Line としても問題ありません。もちろん、.Format.Line の後に.Weight = 5 として1行にしてもOKです。
 これは、FullSeriesCollectionというコレクションの7番目のオブジェクトを選択しておいて、そのプロパティである.Format以下をセットしています。

Active部分を統合

 Active部分はコードを読み込む必要があります。冒頭部分では最初のチャートオブジェクトをアクティブにして、そのアクティブチャートに対してプロパティを設定するようにしているので、このケースでは、.ChartObjects(1).Chart としなければいけません。コードは以下のようになります。

Sub Macro1_manual4()
    With ActiveSheet.ChartObjects(1).Chart.FullSeriesCollection(7).Format.Line
        .Weight = 3       '数値を変えて動作を確認する。
    End With

End Sub

毎回、Weightの値を変えて正しく動くか確認しています。

全てのグラフの幅を変更できるようにする

 今までは、1つのグラフの幅を変更してきましたが、これを全てのグラフに適用するようにします。
全てを変更するには、FullSeriesCollection(7) の 7の部分をループすれば良いのがわかるかと思います。まずは完成したコードをみてください。

Sub Macro1_manual5()
    Dim i As Long
    
    With ActiveSheet.ChartObjects(1).Chart.FullSeriesCollection
    
    For i = 1 To .Count
        .Item(i).Format.Line.Weight = 2
    Next i
        
    End With

End Sub

 まず、With 部分を.FullSeriesCollection までで切っています。これはコレクションのプロパティである .Count を得たいからです。
 次に、 .Item(i) というのが出てきましたが、これがコレクションの中の要素を1つ取り出すために必要になってきます。

 これでアクティブになっているシートの(一番最初の)折れ線グラフの幅を一度にかえることが出来るようになりました。
  .Item(i).Format.Line.Weight = 2
の2の部分が折れ線グラフの幅の太さになります。

「マクロの記録」からプログラムコードを起こす方法として参考にして頂ければと思います。

最後に

 今回は、「マクロの記録」が出力してくる .FullSeriesCollection を使って説明しましたが、他のサイトの紹介などでは、.SeriesCollection の方を使っているケースが多いようです。後者の方は前者より使えるメソッドが多く便利なためだと思います。

 よく似ているオブジェクトなので、.SeriesCollection の方に差し替えても問題なく動きます。

タイトルとURLをコピーしました