• 締切済み

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/17068)
回答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)が使えません。 これらは、どのように記述すればよいのでしょうか。

関連するQ&A

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

    以前に質問しましたが解決していませんので再度質問します。 ActiveChartではなく、具体的なチャート名で 指定するにはどのように記述すればよいでしょうか。 具体的には、以下のtest()のコードの最後の1行 ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows をActiveChartを使わずに記述するには、 どのように記述すればよいでしょうか。 回答例のように具体的なコードを教えてください。 よろしくお願いします。(Windows10,Excel2016) --------------------------------------- Sub test()  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  ActiveChart.SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows End Sub --------------------------------------- (注1)test()を実行する前にSheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力してから実行してください。 (回答例) --------------------------------------- Sub test()  Dim chart_name As String  ThisWorkbook.Worksheets("Sheet1").Select  ThisWorkbook.Worksheets("Sheet1").Range("A10").Select  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart2(297, xlBarStacked100).Select  chart_name = ActiveChart.Name  chart_name = Trim(Right(chart_name, Len(chart_name) - Len(ActiveSheet.Name)))  ThisWorkbook.Worksheets("Sheet1").ChartObjects(chart_name).SetSourceData Source:=Range("Sheet1!A1:B2"), PlotBy:=xlRows End Sub --------------------------------------- (注2)ただし、このコードではエラーになります。 (注3)回答例のようにチャート名を取得するためにActiveChartを使用するのは可です。

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • Excel VBA With ~ End With

    Excel VBA With ~ End Withを使わずに記述するには Sheet1シートのセルA1,A2,B1,B2にA,B,75,25の値を入力して、 Sub test1()  With ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart   .ChartType = xlBarStacked100   .SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows  End With End Sub を実行すると横棒グラフが1個表示されますが、 これを、With ~ End Withを使わずに記述すると Sub test2()  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.ChartType = xlBarStacked100  ThisWorkbook.Worksheets("Sheet1").Shapes.AddChart.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:B2"), PlotBy:=xlRows End Sub というようになると思いますが、 実行すると縦棒が2個表示されてしまって同じ結果になりません。 なぜなのでしょうか。 test1を、With ~ End Withを使わずに記述するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。(Windows10,Excel2016)

  • エクセルのグラフ

    グラフが貼り付けられているシートを見えない状態でグラフ描画したいのですがうまくいきません ちなみに、今のコードはこうです。 Sub 電力力率表示() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SetSourceData Source:=Sheets(s_NAME) _ .Range("A2:C146"), PlotBy:=xlColumns End Sub

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(\"J11:M35\"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets(\"sheet1\").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • エクセルVBAのグラフに関することです!助けてください!

    先日にも質問させていただいているのですが、ブック内のシート全てにグラフがあります。そのグラフの大きさを統一したいのですが、初心者でなかなかうまくいかず、どこをどのようにかえたらいいかもわかりません。サイトをみて参考に作ってみたマクロでは、一枚のシートだけうまく表示されてしまいます。私のような素人にどなたか教えていただけないでしょうか。。たいへん困っています。 Sub グラフ1() Dim ws As Variant Const MYRNG As String = ("a11:a58,d11:g58") 'データ範囲 For Each ws In ActiveWorkbook.Worksheets Charts.Add With ActiveChart .ChartType = xlXYScatterLines .SetSourceData Source:=ws.Range(MYRNG), _ PlotBy:=xlColumns .Location Where:=xlLocationAsObject, Name:=ws.Name End With With ActiveChart.PlotArea '仕切りなおし With .Border .ColorIndex = 16 .Weight = xlThin .LineStyle = xlContinuous End With .Interior.ColorIndex = xlNone End With Next ws End Sub

  • VBAでグラフ作成

    過去のログから色々探したのですが、原因が分かりません。お願いいたします。 エクセルのグラフの元データの範囲を ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("J11:M35"), PlotBy:=xlColumns から ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(11, 10), Cells(35, 13)), PlotBy:=xlColumns に書き換えたら動かなくなってしまいました。 ナゼでしょうか? すいません、初歩で、、。お願いいたします。

  • エクセル2003のvba

    エクセル2003のvbaについて質問です 以下のようなマクロを作成したのですが Chart.SetSourceData メソッドのSheets(1)をマクロを実行した時点のアクティブシートにする方法を教えてください。 Sub グラフ() Charts.Add ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SetSourceData Source:=Sheets(1).Range("n1:n100,q1:q100"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart.Axes(xlValue) .HasMajorGridlines = False End With ActiveChart.HasLegend = False end sub

  • 2本ある折れ線グラフの範囲をVBAで更新したい

    2本ある折れ線グラフの範囲をVBAで更新したいと考えております。 excel2003を使っています。 グラフ1の中に系統がひとつなら以下の内容でうまくいきますが、2本ある場合どうすれば 良いか分からず困っております。 Sub サンプル() Dim myPicture As StdPicture Dim buf As String Dim myR With Worksheets("Sheet1") myR = Application.WorksheetFunction.Count(Worksheets("Sheet1").Range("A5:A100")) End With row1 = "5" row2 = myR col1 = "A" Sheets("Sheet2").Activate ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(col1 & row1 & ":" & col1 & row2 + 4), PlotBy:=xlColumns End Sub 系統を増やした場合の書き方をどなたかお教え頂けませんか。 どうぞ、よろしくお願い致します。

  • エクセルマクロのrangeオブジェクト

    グラフを作成する下記のマクロでRangeオブジェクトにて範囲指定しておりますが,これをR1C1形式で表現するにはどうすればよいでしょうか? ActiveChart.SetSourceData Source:=Sheets(tmpSheetName).Range("A2:AM2,A81:AM81"), PlotBy:=xlRows どうかよろしくお願いします.

専門家に質問してみよう