Excelのグラフをshapeオブジェクトと指定する方法

このQ&Aのポイント
  • Excelのグラフをワークシート上にオブジェクトとして貼り付ける方法を紹介します。グラフをshapeオブジェクトとして扱うことで、位置や拡大縮小が可能になります。
  • グラフに名前を付ける方法について説明します。例えば、「問1-(1)」という名前を指定することで、指定した名前でグラフを操作することができます。
  • グラフの移動位置を絶対的に指定する方法についても解説します。Excel2003を使用している場合でも、絶対的な位置指定が可能です。
回答を見る
  • ベストアンサー

Excelのグラフをshapeオブジェクトと指定すること

こんばんは,助けてください。 Excelで大量にグラフを作成しています。 この時,グラフはグラフシートではなく,ワークシート上にオブジェクトとして貼り付けています。 このようにすると,Shapes(index)のようにして,indexのところにグラフの名前を入れて,Shapeオブジェクトを取得すると,グラフの位置や拡大縮小ができるようになりますよね。 これは,便利と思って,大量のグラフを整形して整列させようと思っています。グラフを作った順番がめちゃくちゃだったり,その他いろいろな事情で,インデックス番号を指定するのではなくて,名前を指定してやりたいと思います。 そこで, Activechart.Name = "問1-(1)" の様に指定してみたのですが, Activesheets.shapes("問1-(1)").・・・ のように指定して,縮小や移動をしようとしても,うまくいきませんでした。 このような場合に,グラフに名前を付けるにはどうしたらよいのでしょうか。教えてください。 また,ついでで申し訳ないのですが,グラフを移動させる位置を,相対的に指定するのではなくて,絶対的な位置に指定する方法はないものでしょうか?こちらも,もしよかったら教えてください。 ちなみに,Excelは2003です。よろしくお願いします。

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.1

面白そうなのでちょっと試してみました結果、 名前の付け方に問題があるみたいで、 ハイフン、カッコを外し、"問1の1" とかにすると 上手くいくみたいです。 '試しに簡単なグラフを3つ作り下記のコードを実行してみてください。 Sub Test() Dim Gf As Shape Dim N As Integer For Each Gf In ActiveSheet.Shapes N = N + 1 Gf.Name = "問1の" & N Next Gf End Sub グラフの移動等の位置大きさ等に関することですが セルのTop,Leftを利用したらどうでしょうか。 グラフ(問1の3)を B5の左上隅へ移動する場合 Sub Test5() Dim N As Integer N = 3 With ActiveSheet.Shapes("問1の" & N) .Top = Range("B5").Top .Left = Range("B5").Left End With End Sub セルのTop , Leftを利用した方が移動も 大きさの設定(セルの20個分の大きさにするとか)も 簡単ですし汎用性があると思います。 以上です。  

関連するQ&A

  • エクセルのマクロでグラフオブジェクトを指定位置に移動?

    お世話になります。 エクセル2000のマクロで困っています。 Range("indirect(AR69)").Select Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("前年比").Range("indirect(AR69)"), PlotBy _ :=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="前年比 このマクロ(自動記述)でシート「前年比」にグラフオブジェクトを作りました。 このグラフを指定したセル位置に移動するのはどうすればいいでしょうか。 具体的にはセルAB5の左上の角にグラフの左上をピッタリ重ねたいのです。 あと、グラフオブジェクトに名前をつけて、このグラフを選択する時に名前で選択できるでしょうか。 "グラフ 6964"みたいに通し番号が付けられていて非常にやりにくいのですが。 よろしくお願いします。

  • 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 時に(グラフの名前ではなく) オブジェクトの名前を指定できれば希望のオブジェクトを 簡単に選択できると考えているのですが、これは可能でしょうか? 何卒ご教授のほど、よろしくお願いいたします。

  • Excel VBAでグラフを移動させるマクロを作りたいのですが

    VBA初心者です。 エクセル上で、その時点でアクティブなグラフを移動させたいのですが・・・ Dim myName myName = ActiveChart.Name ActiveSheet.Shapes(myName).IncrementLeft 10.00 これを実行すると「指定した名前のアイテムが見つかりませんでした」と、エラーがでます。 おそらく、Shapes("グラフ 1")としなければならないのに、Shapes("Sheet1 グラフ 1")となっているためと思われますが・・・? このエラーをなくすには、どうすれば良いのでしょうか?よろしくお願いします。

  • Excelでのグラフ作成用マクロについて

    Excelで、グラフ作成をするマクロを作りました。 sheet1のBC列選択→sheet2に出力→プロットエリア拡大まではうまくいったのですが、肝心の「図の位置調整・サイズ調整」が出来ませんでした。 中身を見たところ、「グラフ12」とかいう名前が勝手についていたらしく、何回やってもその名前を変更することが出来ませんでした。 参照する列を変更してグラフを作成しようとすると、次のグラフが「グラフ13」となってしまい、図の位置調整のところでエラーになります。 マクロは次のようなものなのですが、どうすれば「グラフ12」ではなく、「先ほど作ったばかりのグラフ」を参照してくれるのでしょうか? グラフ12という部分に任意の名前さえつけられれば、何とかなりそうなのですが・・・ グラフ12というものは、「グラフウインドウ」で見られるもののようです。 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveSheet.Shapes("グラフ 12").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 12").IncrementTop -105.75 ActiveSheet.Shapes("グラフ 12").ScaleWidth 1.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes("グラフ 12").ScaleHeight 1.21, msoFalse, msoScaleFromTopLeft ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.PlotArea.Select Selection.Top = 1 Selection.Width = 526 Selection.Height = 242 End Sub

  • excelのマクロによるグラフの指定方法

    マクロがどのように記録されるかを見ながら、VBAのスクリプトの書き方を学んでいる初心者です。 Sub Macro1() ' ' Macro1 Macro , ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveWindow.ScrollColumn = 1 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$B$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$B$4:$B$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$C$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$C$4:$C$18" ActiveChart.ChartType = xlLine ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$D$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$D$4:$D$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$E$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$E$4:$E$18" ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "='平均化'!$F$1" ActiveChart.SeriesCollection(3).Values = "='平均化'!$F$4:$F$18" End Sub 以上のマクロを作成し、実行したのですが、”指定した名前のアイテムが見つかりませんでした”と出て、上手く実行されませんでした。 操作対象のオブジェクトを行き来する方法を知りたいのですが、オブジェクトを作成するたびに ActiveSheet.ChartObjects("グラフ 1").Activate のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • エクセルのマクロで同じサイズの複数のグラフを整列して作成する方法

    エクセルで商品毎の販売量推移の散布図を複数作成し、それぞれのグラフを比較する等して販売活動の参考にしているのですが、対象となる商品の数が増えてきたので比較作業が大変になりました。一つのシートに比較邸小さな同じサイズのグラフを作成し、きちんと並べることができれば、作業が大変楽になると思っています。勿論、シートをスクロールしてグラフを見る前提です。 そこで、「新しいマクロの記録」でコードを作成してみたのですが、次の点がわからず困っています。ご指導の程よろしくお願い致します。 1.グラフを作成する際、最初からサイズを指定する方法 「新しいマクロの記録」では、一度作成したグラフのサイズを縮小する内容※になっていますが、これを最初からサイズ指定する方法があるのでしょうか? ※ ActiveSheet.Shapes("グラフ 103").ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft 2.移動する際のグラフの名前?の指定方法 名前が分からないのでグラフを移動しようと思ってもグラフを指定することができないので困っています。上の例では名前が自動付与されて"グラフ 103"になっていますが、作成したグラフを消去してもグラフを作成するたびに数字が増えてしまうので、作成時に指定する方法を知りたいのです。サイズを指定する数値の単位は下記の移動に使用する単位と同じであれば助かります。 3.グラフの移動方法 「新しいマクロの記録」では下記のように相対的な数字がポイントで指定するようになっていました。 ActiveSheet.Shapes("グラフ 103").IncrementLeft 4.5 ActiveSheet.Shapes("グラフ 103").IncrementTop 43.5 これでは、複数のグラフを整列させることは難しいので、適当な移動方法はないでしょうか? 以上よろしくお願い致します。

  • エクセルのグラフをマクロで縮小化したい

    office2007。Vistaを使用。 エクセルのグラフを縮小するマクロを記録ボタンで作成しました。画面上は縮小されるのですが、「マクロの記録」ではそれが記録されません。office2003で作成したときは zoom を使用したような気がしますが、2007ではどうしたらよいのでしょうか?お教えください。A1B5 にデータが入っています。 Sub Macro1() ' Macro1 Macro Range("B2").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range("'Sheet1'!$A$1:$B$5") ActiveChart.ChartType = xlColumnClustered ActiveChart.Location Where:=xlLocationAsNewSheet ActiveSheet.ChartObjects("グラフ 1").Activate ActiveSheet.ChartObjects("グラフ 1").Activate Sheets("Sheet1").Select Range("A1").Select End Sub

  • Excelでのグラフ作成用マクロについて。

    「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

  • 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

  • エクセルVBAでセル番地を指定してオブジェクト名取得

    いつも大変おせわになり、ありがとうございます。 先日、エクセルシート内に貼り付けたオブジェクトの左上の角が位置するセル番地は、 ActiveSheet.Shapes("Check Box 1").TopLeftCell.Address で求められることをご教示いただきましたが、逆に、セル番地を指定して、そこにオブジェクトの左上の角があるオブジェクト名を取得する方法はありますでしょうか? ご教示いただければ幸いです。

専門家に質問してみよう