Excelの等高線図作成マクロにおける色の変更操作に関するエラーの解決方法

このQ&Aのポイント
  • Excelの等高線図作成マクロにおいて、凡例の色を変更する部分でエラーが発生しています。
  • エラーメッセージによると、'Fill'メソッドが失敗しましたとのことです。
  • このエラーを解決するためには、色の情報を指定する必要があります。具体的には、RGB関数を使用して色のRGB値を指定することができます。
回答を見る
  • ベストアンサー

等高線グラフの書式を設定するマクロ

Excelの等高線図を使って温度分布図を作成しています。 (ある温度以上では赤,ある温度以下では青,というように) その図作成の手順は データ範囲選択→等高線グラフ作成→温度幅(目盛り幅)設定→各温度幅での色の変更 となっています。 この作成手順をマクロ登録しており,上の手順で温度幅の設定までは登録・実行でき るのですが,色の変更操作は登録してもそれについての記述がされません。 今下のようにコードされています。 ActiveSheet.Shapes.AddChart.Select 'グラフを作成 ActiveChart.SetSourceData Source:=Range("'Sheet1'!$D$7:$Z$107") 'シート1のデータを使用 範囲選択 ActiveChart.ChartType = xlSurfaceTopView '等高線作成 ActiveChart.Axes(xlSeries).Select Selection.Delete ActiveChart.PlotBy = xlRows ActiveChart.HasAxis(xlValue) = True ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MinimumScale = 0 ’温度幅設定 ActiveChart.Axes(xlValue).MaximumScale = 30 ActiveChart.Axes(xlValue).MaximumScale = 110 ActiveChart.Axes(xlValue).MajorUnit = 10 ActiveChart.Legend.Select ActiveChart.Legend.LegendEntries(1).Select '色の変更 10個の凡例の色を一つずつ変えていきたい ActiveChart.Legend.LegendEntries(2).Select ActiveChart.Legend.LegendEntries(3).Select ActiveChart.Legend.LegendEntries(4).Select ActiveChart.Legend.LegendEntries(5).Select ActiveChart.Legend.LegendEntries(6).Select ActiveChart.Legend.LegendEntries(7).Select ActiveChart.Legend.LegendEntries(8).Select ActiveChart.Legend.LegendEntries(9).Select ActiveChart.Legend.LegendEntries(10).Select End Sub 上の通り凡例の色変更の部分で、色の情報などが記述されていないので ActiveChart.Legend.LegendEntries(1).Format.Fill.ForeColor.RGB = RGB(0, 0, 0) と入れてみたのですがこれを実行すると 実行時エラー’-2147467259 (80004005)': 'Fill'メソッドは失敗しました:'ChartFormat'オブジェクト と表示されます。 どこに問題があるのか,どのように変えればいいのか教えてもらえないでしょうか。

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

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

下記で試してください。 (例1) ActiveChart.Legend.LegendEntries(1).LegendKey.Interior.Color = RGB(0, 255, 0) (例2) ActiveChart.Legend.LegendEntries(1).LegendKey.Interior.ColorIndex = 7

c_v_b118
質問者

お礼

試してみたところ上手くいきました! ありがとうございました。

関連するQ&A

  • Excel2003マクロ(グラフ)が2007エラー

    お世話になります。 Excel2003で作成したマクロ(グラフの縦軸を調整)が2007でエラーになり困っています。 マクロは既に作成されているグラフの縦軸の最大値、最小値、目盛間隔を変更するものです。 マクロの記録を元に作成しました。 ActiveSheet.ChartObjects("lv" & chart_count).Activate (ここまではエラーにならず、グラフが選択された状態になりました。) With ActiveChart.Axes(xlValue) ←この行でエラーになります .MinimumScale = lower_limit .MaximumScale = upper_limit .MinorUnitIsAuto = True .MajorUnit = interval .Crosses = xlCustom .CrossesAt = lower_limit   .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With 2007でもマクロの記録をして、何も変更せずに実行してみたのですが ActiveChart.Axes(xlValue).select のところでエラーになりました。 何も変更せず、記録したまま実行してもエラーになるので、何が悪いのか全く分からず困っています。 どなたかマクロに詳しい方、教えて頂けませんでしょうか。

  • 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でのグラフ作成用マクロについて

    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

  • 複数のグラフを整列させて表示する方法

    現在、複数のグラフを作成するマクロを作っています(ちなみに、今日はじめてマクロを用いたグラフ作成に取り組みました)。 それぞれの行に13個のデータが入っていて(平均値と標準偏差がそれぞれ入っている)、それを用いて行ごとにグラフを作成します。 データが格納されている行はだいたい300個くらいなのですが、今のままだと300のグラフがすべて重ねられた状態で出てきます。 これを整列した状態で表示させたいのですが、どのようにすればよいのでしょうか? あと、今回はほとんど「マクロの記録」で作ったので、なんかソースが汚ないのでもう少し綺麗にならないでしょうか? 下にソースをのせておきます。よろしくお願いします。 Sub Macro6() ' ' Macro6 Macro ' ' Dim x As Long Cells(1, 1).Select x = Range(Selection, Selection.End(xlDown)).Rows.Count For i = 2 To x Range(Cells(i, 2), Cells(i, 14)).Select 'これがないと棒どうしが密着したグラフになる。 ActiveSheet.Shapes.AddChart.Select 'データの範囲を指定 ActiveChart.SetSourceData Source:=Range(Cells(i, 2), Cells(i, 14)) 'エラーバーをつける ActiveChart.ChartType = xlColumnClustered ActiveChart.SeriesCollection(1).HasErrorBars = True ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlErrorBarIncludeBoth, Type:=xlErrorBarTypeCustom, Amount:=Range(Cells(i, 15), Cells(i, 27)), MinusValues:=Range(Cells(i, 15), Cells(i, 27)) 'Legendを消す ActiveChart.Legend.Select Selection.Delete 'タイトルや軸ラベルの名前を変更する ActiveChart.SetElement (msoElementChartTitleAboveChart) ActiveChart.ChartTitle.Text = Cells(i, 1) ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) ActiveChart.Axes(xlCategory, xlPrimary).axistitle.Text = "Class" ActiveChart.Axes(xlCategory, xlPrimary).axistitle.Font.Size = 14 ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated) ActiveChart.Axes(xlValue, xlPrimary).axistitle.Text = "Intensity" ActiveChart.Axes(xlValue, xlPrimary).axistitle.Font.Size = 14 Next i End Sub

  • 自動グラフ作成マクロの作り方に関してアドバイスを下さい

    Sub Macro4() For i = 4 To 8 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=zero!R13C1:R1013C1" ActiveChart.SeriesCollection(1).Values = "=zero!R13C" & i & ":R1013C" & i ActiveChart.SeriesCollection(1).Name = "=zero!R12C" & i ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x axis" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y axis" End With Next End Sub これはzeroというシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • マクロで小数点以下の桁数を変更

    シート内に複数のグラフがあり、 あるセルに数字を入れてマクロを実行するとグラフの最大値と最小値とレンジが変わるように してあります。下のマクロです。 ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Axes(xlValue).Select With ActiveChart.Axes(xlValue) .MinimumScale = Range("W8").Value .MaximumScale = Range("W7").Value .MinorUnit = Range("W9").Value .MajorUnit = Range("W10").Value .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With これに仕様追加したいのが、小数点以下の桁数を任意に変更したい、と言うことです。 通常が5だとすると、マクロ実行で5.0、5.00、5.000など。 小数点以下1桁なら"1"とか入力して変更できれば一番良いかなと思っております。 まだ初心者のため、情報不足がありましたらすぐに補足しますので、 なんとか宜しくお願いします。

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

    エクセルにてグラフの線の色を変えるマクロを記録し そのまま実行するとエラーになります。 (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で、VBAを用いてのグラフ作成。1日ごとの範囲でグラフシート

    Excelで、VBAを用いてのグラフ作成。1日ごとの範囲でグラフシートを作成。それぞれのグラフのX軸の範囲を、グラフタイトル名とグラフシート名に設定したい。(使用環境 : Excel 2004 Mac 日本語版) Excel VBAに関して質問します。グラフの元になる「表1」シートには、次のように1分間隔でデータが入力されています。 #######ここから####### 日時 系列A 系列B 2010/3/1 12:00 0 5 2010/3/1 12:01 1 2 2010/3/1 12:02 1 5 2010/3/1 12:03 5 5 (中略) 2010/3/31 11:57 2 1 2010/3/31 11:58 5 1 2010/3/31 11:59 3 1 2010/3/31 12:00 5 100 #######ここまで####### この表を、2010年3月1日から2010年3月31日までの、1日ごとのグラフにしようと思います。 私は初め、「日時」セルから、最後の「100」セルまでを選択し、グラフウィザードからグラフシートを作成しました。このグラフシートを、すべてのグラフシートの大本になるグラフシートとして、「おおもと」と名付けました。 そうして次のVBAプログラムを書きました。 #######ここから####### Option Explicit Sub Macro1() ' ' Macro1 Macro '3月1日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/1 12:00# .MaximumScale = #2010/3/2 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect '3月2日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/2 12:00# .MaximumScale = #2010/3/3 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect (中略) '3月30日分 Sheets("おおもと").Select Sheets("おおもと").Copy Before:=Sheets(1) ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = #2010/3/30 12:00# .MaximumScale = #2010/3/31 12:00# .MinorUnit = 0.0416666667 .MajorUnit = 0.125 End With ActiveChart.Deselect End Sub #######ここまで####### 上記のVBAプログラムを実行し、一応グラフは描けたのですが、作成したそれぞれのグラフシートのシート名とグラフタイトル名が、それぞれのグラフの日時の範囲を反映したものとなっておらず、一見してどの日時範囲をグラフ化したものか読み取れず、難儀しています。 そこで、3月1日分から3月30日分までのグラフシートとグラフタイトル名を、それぞれの日付の範囲に即した物(たとえば3月1日分のグラフシートは、グラフシート名が「3月1日」、グラフタイトル名が「3月1日」)になる、VBAの書き方を教えて貰えないでしょうか。 長々とした質問ですが、どうぞ、よろしくお願いします。

  • Excelのグラフの目盛について2

     お世話になっていますHUKAHIREです。昨日、目盛線を制限したいんですけど、、、って質問したんですけどなかなか良い方法はなさそうで、やはり目盛間隔で線を引くしかなさそうですね。  それで質問なんですけどExcelのセルに値をセットしておいて、それを自動で目盛間隔と目盛最大値、最小値のプロパティに設定できる方法はありませんか?  マクロでは ActiveChart.Axes(xlValue).MajorGridlines.Select With ActiveChart.Axes(xlValue) .MinimumScaleIsAuto = True .MaximumScaleIsAuto = True .MinorUnitIsAuto = True .MajorUnit = 0.2 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With こんな感じらしいんですけど私は全くマクロが分かりません、、。なにか良い方法はありませんか?

  • エクセル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になっていまいます。 どうすればいいのでしょうか?

専門家に質問してみよう