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

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

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

マクロでもグラフはできる


さて、いよいよですが・・・私もあんまりグラフ系はマクロでは扱いません。ですが、エクセルで出来ることはすべてマクロで実現可能!ということですから、ちょっと扱ってみましょうか?程度です。
やってることはいつもと同じ。

オブジェクトを正しく指定しましょう!


というだけです。これはVBAの世界ではいつでも言えることです。

グラフはChartオブジェクトが持っている


グラフに関する動作や表示などはすべてChartオブジェクトというオブジェクトがVBAでは用意されており、それを利用したり、自分で作ったりします。正しくオブジェクトを指定すればエクセルマクロは超簡単!という言葉通り、このChartオブジェクトを操作すればエクセルマクロでグラフが操作できるわけです。


簡単ですね。


私も実はあんまりChartオブジェクトは使わないのですが、オブジェクトとプロパティの概念を理解しているので、大体想像がつきます。つまり・・・

  • Chartオブジェクトってのが全体で・・・
  • きっと表示のプロパティとか
  • グラフの種類のプロパティとか
  • 線の色のプロパティとか
  • そのほか色々プロパティを持ってるのねー


という想像ができるわけです。この時点でなんとなーく。。。

  • Chartオブジェクト作って
  • プロパティ設定して
  • 表示する

みたいなことをすればいいだな。ということまではわかります。書き方は知らないけど。書き方はGoogle先生が教えてくれるわけですよ。これもちゃんとオブジェクトとプロパティを理解してプログラミングの基礎が分かっているからできることです。

ChartObjects.AddメソッドとCharts.Addメソッド

ちょっと「VBA グラフ 作成」で検索してみます。


f:id:drumer2sh:20140509104819p:plain


ほいほい、出てきました。そのうちのいくつかのサイトで書き方を調べます。そこで得た知識。

  • Charts.Addメソッドでグラフを追加できる(グラフシートが追加される)
  • シートオブジェクトのChartObjects.Addメソッドでシートのグラフを追加できる
  • グラフの範囲はどちらもSetSourceDataメソッドで設定する
  • ShapesオブジェクトのAddChartメソッドでも良いみたい。

ふむ。ということは、Chartオブジェクトを追加してグラフを追加し、そのグラフオブジェクトのSetSourceDataメソッドを使って、グラフのデータ範囲を設定すればいいようです。


( ゚д゚)?ふぁ?


となっている人が浮かんだのでもうチョイ説明します。オブジェクトとメソッドの関係はこのブログの最初の方でもやりましたが、オブジェクトがメソッドを持っている。という関係です。オブジェクトをロボで置き換えれば、ロボはメソッド(機能)を持っているわけです。今回で言えば、Sheetロボの中にあるChart子ロボがグラフの範囲を決定する機能(メソッド)を持っているということです。


f:id:drumer2sh:20140509104829p:plain


図にするとこんな感じ。ちなみにCharts.Addメソッドはグラフシートが追加されるということですから、Sheetオブジェクトよりも上っぽいです。調べてみる(ヘルプ)と案の定WorkBookオブジェクト配下にあるコレクションオブジェクトのようです。
つまり・・・


f:id:drumer2sh:20140509104835p:plain


こういう構造ですね。ここまでコード一切なし!!ですが、別にいいんです。なぜなら、この考え方ができないと「コードは書けない」からです。逆に言えばこの構造が理解できてればコード書くのは一瞬で終わりです。


( ゚д゚)?ほんとに?


ほんとです。


後はちゃちゃっと書くだけです。

Sub test()
    
    Dim co As ChartObject
    Dim graphRange As Range
    
    ' グラフを追加して
    Set co = Sheet1.ChartObjects.Add(50, 40, 200, 100)

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

End Sub

はい、おわり。これを見ればわかりますが、グラフの種別はChartTypeプロパティに設定しています。これも「VBA グラフ 種類」とかで検索すれば、どのプロパティを設定すればいいのか?ということがわかるので、それを書くだけです。


ここまで何も「何も難しいことはしていない」ということを理解してもらえるでしょうか?ただただ、

  • エクセルでグラフってどのオブジェクトが持ってるかを調べて
  • グラフの種類はどんなプロパティかを調べて
  • グラフを追加するにはどんなメソッドかを調べて
  • 書いた


だけです。ちゃんとオブジェクトとプロパティとメソッドの関係を理解しているからできるのです。ここでもやっぱりSelectメソッドなんて使いませーん。


ということで。今日はここまで。


かしこ