エクセルマクロのグラフ操作でエラーが発生する問題の解決方法

このQ&Aのポイント
  • エクセルにてグラフの線の色を変えるマクロを記録し、そのまま実行するとエラーになってしまいます。具体的には、Lineメソッドが失敗しました。
  • このエラーを解消するために、マクロのコード内の何箇所かを変更する必要があります。
  • 具体的な変更箇所は、グラフの線の色を変えるためのコード部分です。Format.LineのForeColor.RGBの値を適切に変更することで、エラーが発生しないようになります。
回答を見る
  • ベストアンサー

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

エクセルにてグラフの線の色を変えるマクロを記録し そのまま実行するとエラーになります。 (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

  • obone
  • お礼率51% (111/215)

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

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

.Legend.LegendEntries(1) とは、『凡例』の1番めの凡例文字です。 これを選択して右クリック、ミニツールバーから「図形の枠線」を使って色を変えると 提示されたマクロが確かに記録されます。 ですが、 凡例1選択後右クリックして「データ系列の書式設定」から「線の色」を変更してみてください。 マクロ記録は ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select ActiveChart.SeriesCollection(1).Select With Selection.Format.Line   .Visible = msoTrue   .ForeColor.RGB = RGB(192, 0, 0)   .Transparency = 0 End With このように記録されるはずです。 >ActiveChart.Legend.LegendEntries(1).Select の後に記録されている SeriesCollection(1) というのが『系列1』の事です。 グラフの線の色を変えるには、この系列1の.Format.Line.ForeColor.RGB を変更する操作が必要です。 マクロ記録は便利な機能ですが、パーフェクトに機能しているわけではないです。 特に図形を扱う時は、『Selection』は暗黙のうちに処理され、記録されない事も少なくありません。 記録マクロを参考に、ヘルプも駆使してコードを整理する事が必要です。 時に、目的の操作にはSelectionは必ずしも必要というわけではありません。 ActiveSheet.ChartObjects("グラフ 1").Chart.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(192, 0, 0) このように、親オブジェクトから順に階層を辿ってきちんと指定してあげればSelect不要です。 また、マクロを組む時に操作対象が何なのか調べてみると理解が深まると思います。 対象をSelectしてみて、 Sub test()   Dim o As Object   Set o = Selection   Stop End Sub このマクロを実行すると『Stop』行でマクロが一時停止します。 VisualBasicEditor画面で[Alt][v][s]の順押しで[ローカルウィンドウ]が表示されます。 変数 o が何の型なのか、『型』フィールドに表示されます。 例)Object/Series これを元にヘルプを使って、そのオブジェクトが持っているプロパティやメソッドを調べたりする事ができます。 また、変数 o の左 田マークをクリックする事で o に格納されたオブジェクトのプロパティの内容を見る事もできます。

obone
質問者

お礼

とても詳しく教えていただき感謝いたします。 大変、勉強になりました、ありがとうございました。

関連するQ&A

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

    エクセルのグラフを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 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

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

    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

  • エクセルVBAでグラフの線とマーカを設定したい

    エクセルVBAでグラフの線とマーカを設定したいです。 グラフの線は無しでマーカの線が有りにしたいのですが、 マクロで記録したコードを見ると グラフの線、マーカの線ともにFormat.Line.Visibleで指定しています。 実際にコードを記述しても、以下の様になり、グラフの線が表示されてしまいます。 ChartObjects("1").Chart.SeriesCollection(10).Format.Line.Visible = msoFalse With ChartObjects("1").Chart.SeriesCollection(10).Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 102, 0) .Transparency = 0 End With グラフの線は無しでマーカの線が有りに設定は出来ないのでしょうか?

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

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

  • Excel マクロ グラフの線とマーカーの太さ変更

    Excel2010でのマクロで折れ線グラフをマクロで作ろうとしています。 線の太さを2.25pt、マーカーの太さを1.25ptにしたいのですが、 マクロの記録では ActiveChart.SeriesCollection(2).Select '線の太さ With Selection.Format.Line .Visible = msoTrue .Weight = 2.25 End With 'マーカーの太さ With Selection.Format.Line .Visible = msoTrue .Weight = 1.25 End With となり、同じ太さになってしまいます。 手動でデータ系列の書式設定をすると各々別の太さになるのですが、 マクロではどうすればいいでしょうか? 宜しくお願いいたします。

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

    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 マクロでグラフの凡例の位置を変更したい

    はじめまして。 Excelマクロ初心者です。 現在、Excelのグラフの凡例の位置を変更するマクロが作れなくて困っております。 =前提条件=     ・マクロを記録するbook(1)とグラフを含むbook(2)は別のファイル     ・book(1)よりマクロを実行し、book(2)を開き、グラフの凡例の位置を変えたい =book(2)の構成=     ・複数のシートが存在(Hiddenも存在)     ・各シートにグラフが複数存在 =現時点で作成したマクロ= Sub graph()   Workbooks.open "C:\********\book(2).xls"   Workbooks("book(2).xls").Active   Dim i AS Integer, wsCnt AS Integer i = 0 wsCnt = Worksheets.Count   For i = 0 To wsCnt Worksheets(i).Active If ActiveSheet.Visible = -1 - xlSheetVisibe Then For Each ChartObject In ActiveSheet.ChartObjects      With ActiveChart ActiveChart.ChartArea.Select ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlBottom End With Next ChartObject End If Next i End Sub 現在、各シートがActiveになることまでは確認できています。 各グラフを掴めているかは確認できておりません。 以上となります。 ご多忙とは思いますが、ご教授いただけると幸いです。 宜しくお願い致します。

  • 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 のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

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

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

  • エクセルマクロでオブジェクトを選択する方法

    エクセル(2002)を使っています。マクロの記録機能を使って円を描くマクロを作成しました。 Sub Maru(xpos, ypos, hankei) ActiveSheet.Shapes.AddShape(msoShapeOval, xpos, ypos, hankei, hankei).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) End Sub 次にこの円を削除したいと思い、同じようにマクロの記録機能を使ったところ、 Sub Macro3() ActiveSheet.Shapes("Oval 64").Select Selection.Delete End Sub となりました。"Oval 64"はオブジェクトの名前のようですが、名前がわかっていないオブジェクト(但し上記マクロで書いたので場所はわかっている)を選択するにはどうしたらいいでしょうか。