• 締切済み

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

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

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>ActiveChart.Location Where:=xlLocationAsNewSheet という事は、シート上のグラフではなくて、グラフシートの場合でしょうか? その後に続く >ActiveSheet.ChartObjects("グラフ 1").Activate >ActiveSheet.ChartObjects("グラフ 1").Activate >Sheets("Sheet1").Select >Range("A1").Select ここで縮小の操作が記録されなかったのは、グラフエリアをマウスを使ってサイズ変更したからでしょう。 表示の縮小であれば、[表示]タブの[ズーム]を使えばマクロ記録されます。 Sub Macro1() ' ' Macro1 Macro ' '   ActiveSheet.Shapes.AddChart.Select   ActiveChart.SetSourceData Source:=Range("'Sheet1'!$A$1:$B$5")   ActiveChart.ChartType = xlColumnClustered   ActiveChart.Location Where:=xlLocationAsNewSheet   ActiveWindow.Zoom = 100 End Sub 2003との互換を考慮すると以下。 Sub test()   With Charts.Add     .ChartType = xlColumnClustered     .SetSourceData Source:=Sheets("Sheet1").Range("A1:B5"), PlotBy:=xlColumns   End With   ActiveWindow.Zoom = 100 End Sub

yasucosmos
質問者

お礼

まさにご指摘の通りで、グラフエリアをマウスを使ってサイズ変更したからでした。たしかに、[表示]タブの[ズーム]を使うとマクロ記録されました。今まで悩んでいましたがやっと解決し、すっきりしました。どうも有り難うございました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

下記で試してください。 With ActiveSheet.ChartObjects("グラフ 1").ShapeRange .ScaleWidth 0.6, msoFalse, msoScaleFromTopLeft .ScaleHeight 0.6, msoFalse, msoScaleFromTopLeft End With Left、Top、Width、Height、各プロパティの値を、指定セル範囲の大きさにすることが出来ます。 With ActiveSheet.ChartObjects("グラフ 1") .Left = Range("D2:H15").Left .Top = Range("D2:H15").Top .Width = Range("D2:H15").Width .Height = Range("D2:H15").Height End With あと、グラフ作成ウイザードでは、 ActiveChart.Location Where:=xlLocationAsNewSheet というように、グラフ作成後場所を決めていますが ActiveSheet.ChartObjects.add を、使えば直接シート上にグラフを描画することができます。

関連するQ&A

  • マクロを利用して、用紙にグラフを縮小印字したい

    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

  • エクセル・マクロでグラフを最背面に移動させたい

    エクセルのグラフを3つピッタリと重ねて表示しています 後ろのグラフを選択する時「最背面に移動」させてますが これをマクロにしたいです とりあえずマクロの記録でしてみたら Sub Macro1() ActiveSheet.ChartObjects("グラフ 7").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 5").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select End Sub と出来たのですが、マクロの実行そしてみると3列目の Selection.ShapeRange.ZOrder msoSendToBack の所で、 「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

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

    Excelマクロ初心者です。 マクロで、グラフを消去する操作をさせたいのですが、どのグラフを消去するかというグラフの指定をどうしたら良いか悩んでいます。 単純に記録マクロでやってみると、以下のようになりました。「グラフ1」といったグラフの名前が分かっていればこれをそのまま応用すればいいのですが、グラフの名前が不明の場合にはどうしたらよいのでしょうか。マクロの中で、グラフの位置などから、グラフの名前を取得するといったようなことなどできるのでしょうかね。どういった方法でも結構ですので、よろしくお願いいたします。 Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveWindow.Visible = False Selection.Delete 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 のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • エクセルのグラフ

    グラフが貼り付けられているシートを見えない状態でグラフ描画したいのですがうまくいきません ちなみに、今のコードはこうです。 Sub 電力力率表示() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SetSourceData Source:=Sheets(s_NAME) _ .Range("A2:C146"), PlotBy:=xlColumns 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のデータを参照してグラフが出来てしまいました。 各シートで動かしたら、そのシート内のデータを読み取り、グラフを作る方法を教えてください。 大変困っています。よろしくお願いします。

  • グラフの参照元を相対参照で記述するには

    マクロ初心者です。 あるグラフを最初テンプレートで作っておいて、他のデータでも簡単に同じグラフを作れるようにしたいです。 マクロの記録で「相対参照」があったので、これでできると思ったのですが、グラフのセルは絶対参照になるようです。下記のようになってりまいます。 Sub Macro6() ' ' Macro6 Macro ' ' ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.PlotArea.Select ActiveSheet.ChartObjects("グラフ 1").Activate ActiveCell.Select ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.PlotArea.Select ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!J3:J11" ActiveChart.SeriesCollection(1).Values = "='Sheet1'!M3:M11" ActiveChart.SeriesCollection(2).XValues = "='Sheet1'!J3:J11" ActiveChart.SeriesCollection(2).Values = "='Sheet1'!P3:P11" ActiveCell.Select End Sub 具体的にやりたい動作は、 1.相対的な場所を決定するセルを選択(表の左上のセルなど) 2. ActiveChart.SeriesCollection(1).XValues = "='1.のセルから右に2列進んだセル:1.のセルから右に2列下に8列進んだセル" ActiveChart.SeriesCollection(1).Values = "='1.のセルから右に4列進んだセル:1.のセルから右に4列下に8列進んだセル" ActiveChart.SeriesCollection(2).XValues = "='1.のセルから右に2列進んだセル:1.のセルから右に2列下に8列進んだセル" ActiveChart.SeriesCollection(1).Values = "='1.のセルから右に6列進んだセル:1.のセルから右に6列下に8列進んだセル" というふうにしたいです。 ご指導お願いします。

  • エクセルマクロのグラフ操作

    エクセルにてグラフの線の色を変えるマクロを記録し そのまま実行するとエラーになります。 (Lineメソッドは失敗しました) どこを変更すれば上手くいきますでしょうか。 '------------------------記録したマクロ ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(192, 0, 0) .Transparency = 0 End With 環境 Windows 7 Office 2010

  • Excelの折れ線グラフの線をマクロから削除したい

    いつも楽しく勉強させていただいております。 OSはWin7でOffice365です。 Excelマクロはまだまだ勉強中です。 Excelシート上の折れ線グラフの線をマクロから削除したいのですが、どうしてもできません。 前提として6本線の折れ線グラフがあります。 データによってはグラフの線は6本以下のことがあります。 その場合は不要なグラフの線を消したいのです。 そこでグラフを右クリックし、[データソースの選択]ダイアログで削除したい系列を削除して、それをマクロ記録しました。 Sub Macro2() ActiveSheet.ChartObjects("グラフ 146").Activate ActiveChart.FullSeriesCollection(6).Delete End Sub これを参考に下記のマクロを書きました。 Sub d() Dim a As ChartObject Dim b As Chart Set a = ActiveSheet.ChartObjects(1) Set b = a.Chart b.FullSeriesCollection(6).Delete End Sub ところが最後の行で「実行時エラー1004 パラメータが無効です」になって異常終了してしまいます。 デバッガを使って調べると b.FullSeriesCollection.Countが3になており、 b.FullSeriesCollection(3).Deleteつまり三つ目の系列なら削除することができます。 しかし最大6個の系列のうち、後ろの方から削除したいのでこれでは困ってしまいます。 どうしたらいいでしょうか。 なぜ系列は6個なのに3個にされてしまうのでしょうか。 ちょっと引っかかるのが[データソースの選択]ダイアログで「データ範囲が複雑すぎるため表示できません」と言われることです。

  • エクセル2013 VBA グラフのデータ系列変更

    エクセル2013を使っています。マクロ初心者です。グラフも普段あまり扱いませんので不慣れです。よろしくお願いします。 マクロの記録を使ってグラフのデータ範囲を変更したら、下記コードが記録されました(○○○はシート名です)。 ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R189C37:R199C37" ActiveChart.FullSeriesCollection(2).Values = "='バ○○○'!R189C38:R199C38" この189と199に変数を下記のように入れました。 Dim r As Integer r = Range("A1").End(xlDown).Row Dim i As Integer Dim s As Integer s = r - 10 i = ActiveCell.Value ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R" & s & "C37:R" & r & "C37" ActiveChart.FullSeriesCollection(2).Values = "='○○○'!R" & s & "C38:R" & r & "C38" これを実行すると、エラーコード400になっていまいます。 どうすればいいのでしょうか?

専門家に質問してみよう