初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩


graph

photo credit: assortedstuff Statistics 1 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

以前の一連の記事でエクセルVBAを使ってPowerPointを操作する方法についてお伝えしてきました。

PowerPointスライドにエクセルの情報を自動で貼り付けていくことができるわけで、そう考えるとアレを貼り付けられないかなーとうことになります。

アレというのは、そう、グラフです。

一連のシリーズからは横道に逸れるのですが、今回はエクセルVBAでのグラフの取り扱いについてその超基本についてお伝えします。

スポンサーリンク

今回のお題:都道府県別グラフ

まず、今回のお題についてお伝えします。

このようなエクセルシートを用意しました。

エクセルVBAでグラフを作るためのお題シート

はい、ちょっと目がチカチカすることと思いますが許してください。

各行に都道府県名が並んでいまして、列は5年刻みの各県の人口推移(千人単位)を表しています。

右上に一つだけ棒グラフを作成しましたが、これは北海道の人口推移となります。

目標としてやりたいことですが、このグラフの参照範囲を一行ずつ下にらしていくというプログラムを作りたいと思います。

それが実現できたとすると

  1. PowerPointに新たなスライドを作る
  2. そのスライドにグラフを貼り付ける
  3. グラフの参照範囲を一行下に移動する
  4. 1へ戻る

などといった繰り返し処理を実現できるのではないか?ということです。

できたら便利そうですよね~。

エクセルVBAでグラフを取り扱う~ChartObjectとChart

では、まずグラフと少し仲良くなるために、こちらのプログラムを作って実行してみましょう。

Sub シート上のChartObjectとChart()

Dim chtobj As ChartObject
For Each chtobj In ThisWorkbook.Worksheets("Sheet2").ChartObjects

    Debug.Print chtobj.Index, chtobj.Name, chtobj.chart.Name

Next chtobj

End Sub

実行するとイミディエイトウィンドウに

エクセルVBAでグラフの名前とインデックス番号を出力

などと表示されたのではないでしょうか?

For Each文でSheet2にあるすべてのChartObjectについて繰り返し処理をして、それぞれについて

  • ChartObjectのIndex:1
  • ChartObjectのName:Chart 1
  • ChartObjectのchartのName:Sheet2 グラフ 1

を表示するという内容です。

結果を見る限りSheet2上にはChartObjectは1つしかなさそうです。というか、一つしか作っていませんから当たり前か。

埋め込みグラフとグラフシート

さて、解説を進める前に、この話をしておきましょう。

エクセルで扱うグラフには二種類あるのはご存知ですか?

シート上に配置をするタイプの「埋め込みグラフ」シートが丸々グラフになっている「グラフシート」の二種類です。

ほら、グラフを新規作成するときに配置先を決めたりしますよね?そこが運命の分かれ道です。

エクセルでグラフ挿入時の配置

そして厄介なことに、エクセルVBAの視点で言うと、この二つのグラフは取り扱い方が異なります。

グラフシートよりは埋め込みグラフのほうが使用頻度は高いと想定されますので、本シリーズでは、グラフと言えば埋め込みグラフ!ということで進めていきたいと思います。

ChartObjectとChart

エクセルVBAで埋め込みグラフを取り扱うときには、ChartObjectそしてChartという二つのオブジェクトを使うことになります。

オブジェクトの構成でいうとChartObjectの配下にChartがある、という構成になります。

そして、ChartObjectに対してChartは一つです。

ChartObjectとChartの指定

とあるシート上にあるChartObjectを指定するときは、オブジェクト名かインデックス番号を使って

Worksheetオブジェクト.ChartObjects(インデックス番号)
Worksheetオブジェクト.ChartObjects(オブジェクト名)

のどちらかで指定をします。

Chartを指定するときは、ChartObjectの配下になりますので

Worksheetオブジェクト.ChartObjects(インデックス番号).chart
Worksheetオブジェクト.ChartObjects(オブジェクト名).chart

と指定します。

Chartを掴むときもChartObjectのインデックス番号かオブジェクト名が必要になりますので、その点覚えておくと良いと思います。

ChartObjectとChartの違い

それぞれグラフを表しているオブジェクトではあるのですが、その役割の差は何かというと

  • ChartObjectはシートにおけるグラフ外観や大きさなどをつかさどるオブジェクト
  • Chartはグラフそのもの

となります。

つまり、シート上の位置やグラフのサイズなどはChartObjectで、グラフのタイトルや種類、データ範囲などはChartで取り扱うということになります。

ですから、シート上のグラフを捕まえる際には、ChartObjectをその名前かインデックス番号で捕まえた上でChartを指定するという形になります。

例えばこのような形ですね。

Dim cht As chart
Set cht = ThisWorkbook.Worksheets("Sheet2").ChartObjects("Chart 1").chart

このChartに対して操作を行うことで、グラフ自体に対してタイトルを変更したり、データ範囲を指定したりが可能になるわけです。

まとめ

以上、エクセルVBAでのグラフの取り扱いについてその超基本についてお伝えしました。

エクセルで言うと

  • グラフの取り扱い方が埋め込みグラフ、グラフシートの二種類が存在している
  • グラフを取り扱う場合にChartObjectとChartという二種類のオブジェクトが存在している

などによって、VBAによるグラフ操作がなんともややこしいものになっちゃっています。

ここをしっかり押さえて頂くことで、バッチリグラフの操作ができるようになりますので、ぜひ覚えておいて下さいね。

次回、実際にグラフに対して操作を行っていきたいと思います。

エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
エクセルVBAで作ったグラフをPowerPointに貼り付けていこうということでシリーズで進めています。今回はエクセルVBAでグラフのデータ範囲を次々と指定していくプログラムを紹介します。

どうぞお楽しみに!

連載目次:エクセルVBAでグラフとPowerPointを操作する

エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!
  1. エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
  2. エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
  3. エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
  4. エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
  5. エクセルVBAでPowerPointのテキストボックスに文字を入力する
  6. エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
  7. 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
  8. エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
  9. 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
  10. エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
  11. エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
  12. エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法

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