2009年06月19日

Shapeとしてのグラフ

ShapeオブジェクトのChartプロパティというのも、Excel 2007になって追加された機能の1つです。
VBAヘルプでその説明を読むと、

図形に含まれるグラフを表す Chart オブジェクトを返します。

とあります。
図形に含まれるグラフ?……ということは、2007では、図形の中にグラフを埋め込むような機能が追加されたということ? と、一瞬思ってしまったのですが、そういうことではなさそうです。

どういうことなのかというと、つまり……

ワークシート上に配置した埋め込みグラフは、VBA的にはChartObjectオブジェクトであると同時に、Shapeオブジェクトとしても扱うことができます。
ただし、従来のバージョンでは、グラフをいったんShapeオブジェクトとして取得してしまうと、そこからそのグラフとしての機能にアクセスする方法はありませんでした。

2007でShapeオブジェクトに追加されたChartプロパティというのは、要するに、ChartObjectオブジェクトのChartプロパティと同様、Shapeとして取得したグラフをChartオブジェクトとして取得し直すための機能、というわけです。
(そう考えると、あのヘルプの解説文には、やっぱりちょっと疑問を感じますが)

また、2007では、グラフを作成する操作をマクロ記録機能で記録すると、ShapesコレクションのAddChartメソッドを使ったコードが生成されます。
このメソッド自体も2007で追加されたもので、その戻り値は、作成されたグラフを表すShapeオブジェクトです。
この戻り値を使ってグラフとしての設定を行いたい場合もあるでしょうから、やはりそこからChartオブジェクトにアクセスする経路が必要となります。

ChartObjects.AddではなくShapes.AddChartを使用するメリットは、Type、Left、Top、Width、Heightの各引数の指定が、すべて必須ではなくオプションであるという点でしょう。
つまり、位置やサイズをいちいち指定しなくても、既定値任せで作成することができるということです。

もっとも、VBAでグラフを作成する場合、その位置やサイズは適当でいい、という人はかえって少数派のような気もします。
それよりも、挿入したい画像の本来の縦横比とは無関係に、幅と高さを必ず指定しなければならないAddPictureメソッドの仕様のほうをなんとかしてほしいと思っているのは、私だけでしょうか?
posted by 土屋和人 at 09:31| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/29906791
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック