VBAでのグラフ作成時の色づけ方法

このQ&Aのポイント
  • VBAを使用して散布図を作成している際に、マーカーの色を統一する方法がわかりません。
  • 実行してみたプログラムでは色が変更されないため、どなたか教えていただけると助かります。
  • その他、グラフ作成に関する情報もお待ちしております。
回答を見る
  • ベストアンサー

VBAでのグラフ作成時の色づけ方法

VBAを使用して散布図を作成しているのですが、 その散布図のマーカーの色をすべて同じ色にするプログラムを考えています。 以下のプログラムを実行してみたのですが色が変更されないため、 どなたか教えていただけると嬉しいです。 よろしくお願いします。 Sub グラフ作成と色づけ() Dim i As Integer With Sheet1.ChartObjects.Add(100, 50, 300, 200).Chart .ChartType = xlXYScatter .SetSourceData Source:=Sheets("sheet1").Range("C2:DD4465") .HasTitle = True .ChartTitle.Characters.Text = "気温変化" .HasLegend = False .HasDataTable = False For i = 1 To 105 .SeriesCollection(i).Interior.ColorIndex = 3 Next i End With MsgBox ("FINISH") End Sub

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

  • ベストアンサー
  • doredora
  • ベストアンサー率57% (4/7)
回答No.1

以前マクロで色の変更をやろうとしたことがありましたが、同じところでつまづいたように記憶しています。 その時は16進数値とRGB値で試してみましたが、RGB値のほうでできました。 その場合、ColorIndexをColorにして .SeriesCollection(i).Interior.Color = RGB(0,0,0) RGB(0,0,0)は黒になり、RGB(255,0,0)は赤、RGB(0,255,0)は緑、RGB(0,0,255)は青になります

mamemoyashi0120
質問者

お礼

出来ました。 丁寧に説明していただき、ありがとうございました。

関連するQ&A

  • 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の保護をかけた時のグラフについて教えてください。

    グラフにタイトルを設定した後、保護をかけると「ChatクラスのHasTitleプロパティを設定できません」といわれてしまい、.HasTitle=Trueで止まってしまいました。シートの保護をかけても動くようにしたいのですが、どうしたらよいのでしょうか。 (保護しなければ通常に動きます。) 'グラフをオブジェクトで配置 set chartObj=worksheets("Sheet1").ChartObjects.Add(200,0,300,200) chartObj.Chart.SetSourceData Worksheets("Sheet1").range(range("b4").End(xlDown),ActiveCell.end(xlToright)) 'タイトルをつける with worksheets("Sheet1").ChartObjects(1).Chart .HasTitle=True .ChartTitle.Text="タイトル" End with 保護をかけてもグラフの作成ができるのに、タイトル部分で止まってしまうのはなぜでしょうか。 よろしくお願い致します。

  • Excel VBA グラフ作成

    グラフを複数、自動で作成しようと思っています。 データは、 がっつり A  1 B  3 C  5 D  8 E  10 しっとり A  3 B  5 ・ ・ ・ 最初に「しっとり」などのような項目名が記してあり、 その後5行はデータになっています。 Aを選択した人が3人、Bを選択した人が5人などの意味です。 A2からデータが入っており、 グラフを作る個数は決まっておらず、表の個数により作成したいと思っています。 「Sheet1」にグラフを自動で作成するにあたり、 3つ質問があります。 マクロに「SampleGraphという名称で作ってみました。」 ----------------- Sub Sample_Graph() Dim i As Long Dim SampleChart As Shape i = 2 Set SampleChart = Worksheets("Sheet1").Shapes.AddChart With SampleChart.Chart .SetSourceData Range("'Sheet1'" & "A" & i + 1 & ":" & "B" & i + 6) .ChartType = xlColumnClustered .HasTitle = True .ChartTitle.Text = Range("A" & i) End With i = i + 7 End Sub ------------------------------ 質問1 実行すると、Set SampleChart = Worksheets("Sheet1").Shapes.AddChartのところで エラー438が出ます。どうしてこのエラーが出るのでしょうか? フォームにプログラムを書いて組んでいるのですが・・・ (フォームのボタン1をクリックしたら実行するようにしています) 質問2 グラフのサイズを決め、個数によって配置を変えたりしたいです。 Inputboxを使い、 ”何列にしますか?”というメッセージを表示 そして、数値を入力すると 3列でグラフ表示される 質問3 図のように、項目名とは別に 「Yes」「No」などを表示させたいです。 データに含むとおかしくなりますし、 かといってタイトルや系列名を変えることも難しいかと。 何か良い方法はありませんか? 以上、質問3点長々と書かせて頂きました。 分かりにくい点が多々ありますが、よろしくお願い致します。 せめて、グラフを作れるようにはなりたいと思っています!

  • Excel VBAでグラフを作成したい

    今、下記の ように参考書のコードを書き写し実行しましたが、実行時エラーが出ます。 Sub グラフ作成()   With Worksheets("sheet1").ChartObjects     .Add(230, 10, 250, 180).Chart      .SetSourceData Range("A3").CurrentRegion     .ChartType = xlColumnClustered   End With End Sub    実行時エラー '438' オブジェクトはこのプロパティまたはメソットをサポートしていません。  と出ます、何が間違いなのかわかりません、私の間違っているところを教えた頂けませんか。お願いします。   

  • 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

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

    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というシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • エクセル2003のvba

    エクセル2003のvbaについて質問です 以下のようなマクロを作成したのですが Chart.SetSourceData メソッドのSheets(1)をマクロを実行した時点のアクティブシートにする方法を教えてください。 Sub グラフ() Charts.Add ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SetSourceData Source:=Sheets(1).Range("n1:n100,q1:q100"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart.Axes(xlValue) .HasMajorGridlines = False End With ActiveChart.HasLegend = False end sub

  • VBA グラフを複数作成する場合

    マクロにてグラフを複数作成しようと考えています しかし、ループを使用してグラフを作成すると 1つ以上の場合エラーになってしまい作成できません どのように作成したらよいのでしょうか? 2つ目以降のグラフObjectの名前が重なるからエラーになるとか、そういう部分での問題でしょうか? ------------------------------------- Sub Graph   For i = 1 To 2 'source_cnt   Call Make_Graph(引数)   Next End Sub ------------------------------------- Sub Make_Graph(引数) With ActiveSheet.ChartObjects.Add( _ Left:=Range(***).Left, _ Top:=Range(***).Top, _ Width:=Range(***).Width, _ Height:=Range(***).Height) .Chart.ChartType = xlRadar .Chart.SetSourceData Source:= Range(***), PlotBy:=xlColumns .Chart.Location Where:=xlLocationAsObject, Name:=WorkSheet.Name .Chart.HasLegend = False End With -------------------------------------

  • エクセルVBAで自動チャート作成。 エラーになります

    シート1に複数のデータが縦に入っています(A3:A90、B3:B90,C3:C90 といった具合です)データの数は30個です。 それぞれのデータを個々のチャートにして別のシート(シート名: Chart1)に並べて表示させたいです。 それで以下の様なコードを書きました。 このコードはうまく動くのですが、同じようにシート2のデータをChart2のシートにチャートを出そうと思って、4行目の・・・Source:=Sheet1.Range(Cells(3, j)・・・のところをSource:=Sheet2.Range(Cells(3, j)にして実行するとエラーになります。 何故だか分からなくて困っています。 対処方法を教えてください。 エラーは Run-time error ‘1004’: Application-defined or Object-defined error です。 お願いします。 For j = 1 To 30 Set ch = ActiveSheet.ChartObjects.Add(10, 5 + j * 105, 500, 100) ch.Chart.ChartType = xlColumnClustered ch.Chart.SetSourceData Source:=Sheet2.Range(Cells(3, j), Cells(90, j)), PlotBy:=xlColumns ch.Chart.Location where:=xlLocationAsObject, Name:="Chart1" With ch.Chart .HasTitle = True .ChartTitle.Characters.Text = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With Next j

  • マクロで記載されたプログラムの意味を知りたいです。

    マクロの記録でグラフを作って少して手直ししたのですが、シート名L8の後でR○○C○○と出てくる記述がよくわかりません。参照しているセルだろうというのはわかるのですが、どういう規則で書かれているかわかりません。よろしくお願いいたします。 Sub L82元表1() Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("L8").Range("AT15:AU17"), PlotBy:= _ xlRows ActiveChart.SeriesCollection(1).Values = "=('L8'!R17C46,'L8'!R19C46)" ActiveChart.SeriesCollection(1).Name = "='L8'!R16C44" ActiveChart.SeriesCollection(2).Values = "=('L8'!R17C47,'L8'!R19C47)" ActiveChart.SeriesCollection(2).Name = "='L8'!R18C44" ActiveChart.Location Where:=xlLocationAsObject, Name:="L8" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = Range("AR14").Text & Range("AS14").Text & "2元表" .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With End Sub

専門家に質問してみよう