• 締切済み

Excel VBA グラフチャート名で指定するには

ExcelのVBAでグラフを作成した後 ActiveChartでアクティブなチャートを指定するのではなく ActiveChart.Nameなどで取得したチャート名で指定するには どのように記述すればよいでしょうか。 例えば、以下のtest()のコードの中の ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone) ActiveChart.PlotArea.Select ActiveChart.Parent.Copy の部分をActiveChartを使わずチャート名(chart_nameなど)で指定するには どのように記述すればよいでしょうか。 よろしくお願いします。(Windows7,Excel2016) --------------------------------------- Sub test()  Dim chart_name As String  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A1") = "A"  ThisWorkbook.Worksheets("Sheet1").Range("A2") = "B"  ThisWorkbook.Worksheets("Sheet1").Range("B1") = "75"  ThisWorkbook.Worksheets("Sheet1").Range("B2") = "25"  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  ThisWorkbook.Worksheets("Sheet1").Select  ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows  chart_name = ActiveChart.Name  chart_name = Trim(Right(chart_name, Len(chart_name) - Len(ActiveSheet.Name)))  ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate  ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone)  ActiveChart.PlotArea.Select  ActiveChart.Parent.Copy End Sub

みんなの回答

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.4

>また、ActiveChart.Nameで"Sheet1 グラフ 1"が取得されますが >chart_name = ActiveChart.Name  chart_name = Trim(Right(chart_name, Len(chart_name) - Len(ActiveSheet.Name))) このコードのままならchart_nameは空文字になりますね。 集合体は、次のような形で個々の要素を取り出せます。 dim obj as Object for each obj in 集合体インスタンス名 if obj.Name = name then MsgBox "発見" end if next WorksheetsだろうがShapesだろうがChartObjectsだろうが同じです。

yam2012
質問者

お礼

>このコードのままならchart_nameは空文字になりますね。 こちらで、test()を実行すると、 chart_name = ActiveChart.Name で "Sheet1 グラフ 1" が取得されて chart_name = Trim(Right(chart_name, Len(chart_name) - Len で "グラフ 1"がされているのですが? そちらでは、空白が取得されているということでしょうか? >集合体は、次のような形で個々の要素を取り出せます。 取得の仕方は分かるのですが、その取得した値を使って、 どのように記述すればよいのかが分からないのです。 取得した値が"グラフ 1"だった場合、 どのように記述すればよいのか教えていただけないでしょうか。 具体的には、 回答No3で頂きました >ActiveChartの代わりにThisWorkbook.Worksheets(sheet_name).ChartObjects(chart_name)を使えば良いだけです。 という回答に対して、下記のように直してみたけれども、 エラーになることをお伝えしましたが、 下記のコードで間違っていましたら、 正しいコードを教えていただけないでしょうか。 1)ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate 2) ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).SetElement (msoElementPrimaryCategoryAxisNone) 3)ThisWorkbook.Worksheets("Sheet1").ChartObjects("グラフ 1").SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows よろしくお願いします。

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.3

>などは、ChartObjects(chart_name)が使えません。 それは当然です。 ChartObjectsは集合体を指していて、ActiveChartやChartObjects(chart_name)は集合体の中のメンバーを指しています。 集合体に「お前の家はどこだ」と聞いても答えがあるわけはなく、メンバーに「お前のメンバーxxは誰だ?」と聞いても答えはないでしょう?。 ActiveChartの代わりにThisWorkbook.Worksheets(sheet_name).ChartObjects(chart_name)を使えば良いだけです。

yam2012
質問者

お礼

>ActiveChartの代わりにThisWorkbook.Worksheets(sheet_name).ChartObjects(chart_name)を使えば良いだけです。 ActiveChartをThisWorkbook.Worksheets(sheet_name).ChartObjects(chart_name)に書き換えてみました。 ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).SetElement (msoElementPrimaryCategoryAxisNone) これらを実行すると、いずれも、 実行時エラー '-2147024809(80070057)': 指定した名前のアイテムが見つかりませんでした。 というエラーになります。 また、ActiveChart.Nameで"Sheet1 グラフ 1"が取得されますが この場合、 ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows を ThisWorkbook.Worksheets("Sheet1").ChartObjects("グラフ 1").SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows のようにしても同様のエラーになります。 この部分の具体的な正しいコードを教えていただけないでしょうか。 よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

http://officetanaka.net/excel/vba/graph/05.htm に説明されています。 >名前は2つある ChartオブジェクトのNameプロパティは値の取得のみ可能です。設定することはできません

yam2012
質問者

お礼

教えてほしかったことは、 ChartオブジェクトのNameプロパティの値の取得の仕方ではなくて ActiveChartを使わずに記述する仕方です。 例えば、 ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone) を、ActiveChartを使わず、"チャート1"という名前で指定するには、 どのように記述すればよいのでしょうか。

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

>ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate ここで質問の内容をやっている

yam2012
質問者

お礼

ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).Activate は、ChartObjects(chart_name)でできるのですが、 ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows ActiveChart.SetElement (msoElementPrimaryCategoryAxisNone) ActiveChart.PlotArea.Select ActiveChart.Parent.Copy などは、ChartObjects(chart_name)が使えません。 これらは、どのように記述すればよいのでしょうか。