初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門:既存のグラフを操作する

f:id:drumer2sh:20140516090141j:plain

前回はグラフをゼロから作りましたが、今回は既にあるグラフについて、操作してみましょう。

グラフに名前を付けて操作する


既にあるグラフをマクロで操作したい場合におすすめな方法です。グラフに名前を付けて、操作します。既にあるグラフを選択して、グラフツールタブからレイアウトを選択します。すると、リボン右端に「グラフ名」というのがありますが、これがこのグラフの名前です。

f:id:drumer2sh:20140516085820p:plain


この名前を自分が分かりやすいように付け替えます。今回は「ScoreGraph」としました。

オブジェクトを正しく指定する


さて、次はオブジェクトを正しく指定するために構成を理解しましょう。見たままの説明をしますが、シートにグラフが張り付けられている場合、当然構成は・・・

シートオブジェクト上にグラフオブジェクト(ChartObject)が存在してる


という状態にいます。さらに前回やりましたが、グラフはChartObjects、このsが大事、つまり複数のグラフオブジェクトをまとめて管理している状態です。マクロのヘルプでChartObjectを調べると・・・

ChartObject オブジェクトは、Chart オブジェクトのコンテナーとして機能します。ChartObject オブジェクトのプロパティとメソッドは、シートにある埋め込みグラフの外観と大きさを制御します。ChartObject オブジェクトは、ChartObjects コレクションのメンバーです。


( ゚д゚)?ふぁ?ChartObjectsコレクション?

コレクションオブジェクトについて


コレクションオブジェクトは、オブジェクトを配列管理している状態と似ています。つまり複数のオブジェクト管理している、オブジェクトがコレクションオブジェクトということです。


( ゚д゚)?


となるのでまた図でやりますが、、、


f:id:drumer2sh:20140516085828p:plain


とまぁこんな感じです。シートオブジェクトがChartObjectsを持っていて、ChartObjectsが実際のグラフのオブジェクトであるChartオブジェクトを持っている。というイメージですね。
では、さっそくオブジェクトの指定ですが、この図を上から順にドットでつなげればいいだけです。操作するのはさっきグラフに名前を付けたScoreGraphを指定します。

日本語で書いてVBAに翻訳する


まずはこの図を日本語で書いてみましょう。すると・・・

シートオブジェクトの、ChartObjectsコレクションの、ChartObject

になりますね。日本語の「の」をドットに置き換えて、VBAに翻訳すると・・・

Sheet1.ChartObjects(名前またはインデックス)


となりますね。んで、名前・・・( ゚д゚)!


そうですね。さっき付けましたよね?ScoreGraphと。後は、この名前を入れてしまえば完成です。

Sheet1.ChartObjects("ScoreGraph")


これが、シートにあるグラフを操作するために指定する方法です。後はこれを用意した変数に代入(Set)してあげれば自由にこのグラフのオブジェクトが持っているプロパティやメソッドを使うことができます。

最後にちょこっとコードを載せておきます。

Sub test()
    
    Dim co As ChartObject
    Dim graphRange As Range
    
    ' オブジェクト正しく指定して変数にセット!
    Set co = Sheet1.ChartObjects("ScoreGraph")

    ' グラフの範囲を設定する
    Set graphRange = Sheet1.Range("A1:G40")
    
    ' グラフの種別を設定して(折れ線グラフ)
    co.Chart.ChartType = xlLineMarkers
    
    ' データの範囲を設定する
    co.Chart.SetSourceData Source:=graphRange

End Sub


今日はここまで!


かしこ