2008年11月16日

グラフの名前(VBA編)

前回はグラフ(単に「グラフ」と書きましたが、グラフシートではなく、ワークシート上に配置された「埋め込みグラフ」のことです)の名前に関する話題でしたが、今回はそれらをVBA的に見るとどういうことになるのか、について書いてみます。

Visual Basic Editorのイミディエイトウィンドウに

?selection.name

と入力してEnterすると、そのとき「選択されているもの」の名前が表示されます。

普通にグラフをクリックした場合、選択されているのは「グラフエリア」または「プロットエリア」「凡例」といったグラフオブジェクトです。名前としては、「グラフ」「プロット」などが返ります。

一方、Ctrlキー(Shiftキー)を押しながらグラフを選択して同様に名前を調べると、「Chart 1」(2003の場合)あるいは「グラフ 1」(2007の場合)のようなグラフそのものの名前が返ります。
2003(以前)で「Chart 1」なのは、ここで紹介した図形の名前と同じことで、“表の名前”はやはり「グラフ 1」です。

同様にイミディエイトウィンドウで

?typename(selection)

とすると、通常選択の場合は「ChartArea」や「PlotArea」といったChartオブジェクト内の選択オブジェクトを表すオブジェクト名が返ります。

一方、Ctrl選択の場合は「ChartObject」が返ります。
これは、ワークシート上に配置された描画オブジェクトとしてのグラフを表すオブジェクトです(つまり、一般的な“図形”と同格のオブジェクト)。

ChartObjectオブジェクトからは、直接その「グラフ」としての機能にアクセスすることはできず、必ずChartオブジェクトを介する必要があります。
Chartオブジェクトは、ChartObjectオブジェクトのChartプロパティで取得できます。

ちなみに、埋め込みグラフのChartオブジェクトの場合、そのNameプロパティで返ってくるのは「Sheet1 グラフ 1」といった形式の名前です。この名前はVBAで参照することはできますが、変更することはできません。
グラフ名をVBAで変更したい場合は、ChartObjectオブジェクトのNameプロパティを設定する必要があります。

ActiveChartプロパティなどで先にChartオブジェクトを取得している場合は、その親オブジェクトであるChartObjectオブジェクトを、Parentプロパティで取得します。
たとえば、選択しているグラフの名前を「成績推移」に変えたい場合は、次のようなコードになります。

ActiveChart.Parent.Name = "成績推移"

なお、グラフシートの場合は、その存在がグラフそのものなので、ワークシートと同格のChartオブジェクトとして直接取得できます。
こちらのNameプロパティはVBAで変更することも可能です。
posted by 土屋和人 at 15:28| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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