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

このQ&Aのポイント
  • エクセルで商品毎の販売量推移の散布図を複数作成し、それぞれのグラフを比較するためには、同じサイズのグラフを作成し、きちんと並べる必要があります。
  • 「新しいマクロの記録」を使ってマクロを作成する際には、以下の点に注意する必要があります。
  • 1. グラフを作成する際、最初からサイズを指定する方法 2. 移動する際のグラフの名前の指定方法 3. グラフの移動方法
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>エラー グラフを選んだままマクロを動かすと,よくそうなる症状です。 では。 Sub macro1R1() Dim c As ChartObject Dim n n = 3 ActiveSheet.Range("A1").Select For Each c In ActiveSheet.ChartObjects c.Height = 200 c.Width = 300 c.Left = Cells(n, "D").Left c.Top = Cells(n, "D").Top n = n + 16 Next End Sub

macchome
質問者

お礼

早速のレスポンスありがとうございました。 一つ目のグラフについてはうまくいきましたが、2つ目のグラフではエラーになりました。 そこで、アドバイスを参考に ActiveSheet.Range("A1").Select の位置を下記のように変更しました所、うまくいきました\(^o^)/ For Each c In ActiveSheet.ChartObjects '---- ActiveSheet.Range("A1").Select '--- c.Height = 200 c.Width = 300 c.Left = Cells(n, "D").Left c.Top = Cells(n, "D").Top n = n + 16 Next おかげさまで、これから一仕事できそうです。 助かりました。 どうもありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

名前を使わず,「オブジェクト」を操作する練習をしましょう。 作成例: Sub macro1()  Dim c As ChartObject  Dim n  n = 3  For Each c In ActiveSheet.ChartObjects   c.Height = 200   c.Width = 300   c.Left = Cells(n, "D").Left   c.Top = Cells(n, "D").Top   n = n + 16  Next End Sub

macchome
質問者

補足

早々に回答をいただきましてどうもありがとうございました。 早速、トライしてみたのですが、途中でエラーが発生してしまいました。 デバッグのステップオーバーでチェックしてみた所、   c.Height = 200   c.Width = 300 では、問題なくサイズが変更されておりました。 次の   c.Left = Cells(n, "D").Left で下記のエラーが表示されました。 -------------- 実行時エラー'1004' 'Cellsメソッッドは失敗しました:'_Global'オブジェクト -------------- c.Left = c.Left とするとエラーは発生せず、 Cells(n, "D").Left=Cells(n, "D").Left とするとエラーが発生するので、 Cells(n, "D").Left の使用方法がおかしいような気がするのですが、 残念ながらそれ以上は分かりませんでした。

関連するQ&A

  • 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 グラフの名前

    EXCEL上でデータを入力して、そのデータを基に手動でグラフを作成して、その過程をマクロに記録します。 出来上がったマクロに対して、MsgBox(ActiveChart.Name)という文を挿入して実行すると、 「グラフ グラフ 3」と表示されます。 一方、手動で作成したグラフを選択して、大きさを変え、それをマクロに記録して中身を見ると、 ActiveSheet.Shapes("グラフ 3").ScaleWidth 1.12, msoFalse, msoScaleFromTopLeft のように表示されます。 グラフの名前としては後者が正しいと思うのですが、 どうして前者のような表示が出てしまうのでしょうか?

  • 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 マクロ記録→実行でグラフ作成に失敗

    次の手順でグラフ作成を試みますが、失敗します。 1.データ範囲を選択した後「マクロの記録」ボタンを押す。 2.ツールバーからグラフウィザードを起動してグラフを作成。 3.サイズやフォントの編集を行って記録を終了。 4.マクロを実行 エラーとして、例えば次の行が指摘されます。 ActiveSheet.Shapes("グラフ 4").IncrementLeft -143.25 この行は"グラフ 4"を対象とした編集を行っていると思うのですが、マクロ実行で新たにグラフを作ると、グラフ名中の数字がインクリメントされて"グラフ n"(n>=5)以降が作られますよね? そのためにエラーが出ると思うのですが、"グラフ 4"では無く上手い具合にグラフ名を指定する方法はありますか? 他にも問題点があるかも知れませんが現状ではこれしか思いつきません。 思い当たる方、ご指摘いただけますでしょうか。 (単純にグラフを作る作業は「マクロ記録→実行」によって可能であることは確認しました。) また、excelでのグラフ作りに有用な書籍やサイトがあれば、教えていただけませんでしょうか。 よろしくお願いします。

  • 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でグラフを移動させるマクロを作りたいのですが

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

  • Excelマクロによるグラフの消去方法

    Excelマクロ初心者です。 マクロで、グラフを消去する操作をさせたいのですが、どのグラフを消去するかというグラフの指定をどうしたら良いか悩んでいます。 単純に記録マクロでやってみると、以下のようになりました。「グラフ1」といったグラフの名前が分かっていればこれをそのまま応用すればいいのですが、グラフの名前が不明の場合にはどうしたらよいのでしょうか。マクロの中で、グラフの位置などから、グラフの名前を取得するといったようなことなどできるのでしょうかね。どういった方法でも結構ですので、よろしくお願いいたします。 Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveWindow.Visible = False Selection.Delete End Sub

  • VBAでグラフに名前をつける方法

    ひょっとしてものすごく簡単なことなのかもしれませんが行き詰っています。教えてください。 埋め込みグラフを3つ作成するマクロを記録しました。 それぞれのグラフに名前を付けて、名前を指定してグラフを選択したいのですが、作成時に ActiveSheet.ActiveChart.Name = "●●●" として ActiveSheet.ChartObjects("●●●").select としてもうまくいきません。 根本的に何かちがうのでしょうか。 よろしくお願いします。

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

    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

  • エクセルでマクロを利用してグラフを作りたい

    エクセルでマクロを利用してグラフを作りたいです。 Sheet1で作ったマクロを、Sheet2でも動かす方法を教えてください。 マクロはド素人なのでいつも自動記録で作成しています。 シートはSheet1はSeet23まであり、各シートのデータのある場所は全て同じです。 今回は、Sheet1でマクロを自動記録させて作りました。 Sub Macro1() Range("G1:M6").Select ActiveSheet.Shapes.AddChart.Select ActiveChart.SetSourceData Source:=Range("'Sheet1'!$G$1:$M$6") ActiveChart.ChartType = xlLine Range("G22").Select End Sub これをSheet2でも動かしたらSheet2にSheet1のデータを参照してグラフが出来てしまいました。 各シートで動かしたら、そのシート内のデータを読み取り、グラフを作る方法を教えてください。 大変困っています。よろしくお願いします。

専門家に質問してみよう