みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBA:埋め込みグラフオブジェクトの命名方法について

質問させて頂きます。

EXCEL2000のVBAで、グラフを色々加工しているのですが、
埋め込みグラフオブジェクトの名前をグラフ作成時に命名する事は
可能でしょうか?

dim myRange as Range
Set myRange = Range("A1:D2")
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=myRange, PlotBy:=xlRows
ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1"
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, LegendKey:=False, HasLeaderLines:=True

とここで、(グラフそのもののサイズではなく)
埋め込みグラフオブジェクトのサイズを変更するとき、

ActiveSheet.Shapes(1).ScaleWidth 1.6, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(1).ScaleHeight 1.9, msoFalse, msoScaleFromTopLeft

のようにすれば、最初に作成したオブジェクトのサイズ変更は可能ではあるのですが、
条件により色々な種類の複数のグラフを順不同で作成しているため、
ActiveSheet.Shapes(1)
では、希望のオブジェクトを選択できるとは限りません。

つきましては、Charts.Add 時に(グラフの名前ではなく)
オブジェクトの名前を指定できれば希望のオブジェクトを
簡単に選択できると考えているのですが、これは可能でしょうか?

何卒ご教授のほど、よろしくお願いいたします。

投稿日時 - 2007-08-16 01:22:40

QNo.3258443

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。
以下のような感じで、埋め込みグラフ作成時に位置と、
サイズを決めてしまえば、後からサイズ変更のために
埋め込みグラフの名前を取得する必要は無くなります。

Sub sample()

Dim myRange As Range
Set myRange = Range("A1:D2")

With Worksheets("Sheet1").ChartObjects.Add(50, 50, 300, 200).Chart
.ChartType = xlPie
.SetSourceData Source:=myRange, PlotBy:=xlRows
.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, LegendKey:=False, HasLeaderLines:=True
End With

End Sub

また何らかの理由で、任意の名前を付けておく必要があるのならこんな感じです。

Sub sample1()

Dim myRange As Range
Set myRange = Range("A1:D2")

Worksheets("Sheet1").ChartObjects.Add(50, 50, 300, 200).Name = "グラフの名前"

With ActiveSheet.ChartObjects("グラフの名前").Chart
.ChartType = xlPie
.SetSourceData Source:=myRange, PlotBy:=xlRows
.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, LegendKey:=False, HasLeaderLines:=True
End With

End Sub

投稿日時 - 2007-08-16 11:02:50

お礼

なるほど・・・、このような手法があったのですね。
ありがとうございます!

別スレで合わせて教えて頂きたいことがありますので、
お時間が許すようでしたらご回答願えないでしょうか。

http://oshiete1.goo.ne.jp/qa3259420.html

投稿日時 - 2007-08-16 13:57:26

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

コピーするのを1行間違えていたようです

Set ch = ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1"
です

投稿日時 - 2007-08-16 11:27:33

お礼

ありがとうございます。

ただ、やはりコードエラーになってしまいます・・・。

投稿日時 - 2007-08-16 14:00:50

ANo.1

Locationメソッドの返り値をChart型の変数で受けて
このNameプロパティの最後の数字とその前に"Chart "をつけたものが
Shapesコレクションに登録されるようです

dim ch as Chart
dim sh as Shape
dim s as variant
set ch = ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, _
HasLeaderLines:=True
s = split( ch.name," ")
set sh = Shapes( "Chart " & s(2))
sh.Name = "myChart1"

といった具合でシートに張り付いたチャートの名前を変更できますよ
別のマクロなどでは

dim sh as shape
set sh = Shape("myChart1")
といった具合で取得できます

投稿日時 - 2007-08-16 06:02:37

補足

ご回答ありがとうございます。

いただいた回答の意味はある程度理解できたのですが、
実際にご教授頂いた以下の記述ができませんでした。
↓この部分と
set ch = ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowLabelAndPercent, _
HasLeaderLines:=True
↓この部分
set sh = Shapes( "Chart " & s(2))

色々試してみたのですが・・・、ダメでした。

それから、これは、どの部分にあたるのでしょう??
> Locationメソッドの返り値をChart型の変数で受けて

たびたびすみませんが、ご教授よろしくお願い致します。

投稿日時 - 2007-08-16 10:55:13

あなたにオススメの質問