VBScriptでExcelグラフ作成の方法

このQ&Aのポイント
  • VBSを生かじりしている者がExcelファイルを開き、データを参照してグラフを作る方法を学んでいます。
  • 現在、2軸グラフを作成しており、グラフスタイルの指定まではできるようになりました。
  • 次に第2系列の折れ線グラフの色を変える方法を試行中ですが、うまく行きません。VBSでのグラフ色の変更方法を教えてください。
回答を見る
  • ベストアンサー

VBScriptでExcelグラフ作成につて

VBSを生かじりしている者です。既存のExcelファイルを開きそのファイルにあるデータを参照してグラフを作るVBS文を作る勉強をしています。現在2軸グラフを作成中で、グラフスタイルの指定まで出来るようになりました。次に第2系列の折れ線グラフの色を変えられないものかと試行中ですが全くうまく行きません。グラフの色を変える方法をご教授願います。もしかしてVBSで出来ない範囲かどうかと思ったり・・・・・ Excel2007のデータ(a1セルから)・・DBからのエクスポートのためa1セルに値有り 月    1    2    3    4    5    6 売上高 540,000 560,000 660,000 750,000 360,000 620,000 粗利益 81,000 128,800 171,600 225,000   65,000 116,500 粗利益率 15.00% 23.00% 26.00% 30.00% 18.06% 18.79% 売上高と粗利益率を参照する2軸グラフの作成VBS文 Option Explicit Dim ex,eb,eg,sE,sW,objEx,nChart ' Excel起動 Set ex=CreateObject("Excel.Application") ex.Visible=True ' 既存ファイルを開く Set eg = ex.Workbooks.Open("C:\Users\hidefumi shima\Documents\VBS\グラフ0002.xlsx") Set eb=eg.Sheets(1) ' 新規グラフ(座標は、グラフのエリア) Set nchart =eb.ChartObjects.add(300, 100, 400, 300) ' グラフデータの範囲取得(終端セル) sE = eb.Range("B1").End(-4121).Row sW = eb.Range("A1").End(-4161).Column ' グラフデータの指定 ex.ActiveSheet.ChartObjects("グラフ 1").Activate ex.ActiveChart.SetSourceData eb.Range("b2").Resize(1, sW-1) ex.ActiveChart.SeriesCollection(1).Name =eb.Range("a2") ex.ActiveSheet.ChartObjects(1).Chart.ChartStyle = 34 '第2データの指定 ex.ActiveChart.SeriesCollection.NewSeries ex.ActiveChart.SeriesCollection(2) ex.ActiveChart.SeriesCollection(2).ChartType = 4 '折れ線グラフ ex.ActiveChart.SeriesCollection(2).Values = eb.Range("b4").Resize(1, sW-1) ex.ActiveChart.SeriesCollection(2).AxisGroup = 2 ex.ActiveChart.SeriesCollection(2).Name =eb.Range("a4") Set eg=Nothing Set eb=Nothing Set ex=Nothing

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

※ObjectThemeColorプロパティを使う場合はExcelの定数は使えないので Constで値を設定して Const msoThemeColorAccent6 = 10 ex.ActiveChart.SeriesCollection(1).Format.Fill. _ ForeColor.ObjectThemeColor = msoThemeColorAccent6 'オレンジ

参考URL:
http://officetanaka.net/excel/vba/graph/13.htm
turu575
質問者

お礼

追加回答有難うございます。 申し訳ない礼の仕方になりましたが下記の記述でもカラー設定できます。試行中エラーが出ていましたので何処か 間違っていたのだと思います。誠に申し訳ありませんでした。 ex.ActiveChart.SeriesCollection(1).Interior.ColorIndex = 3 今回の Const msoThemeColorAccent6 = 10 ex.ActiveChart.SeriesCollection(1).Format.Fill. _ ForeColor.ObjectThemeColor = msoThemeColorAccent6 'オレンジ OKです。 参考URL先は私も前に見ました。能力不足でConst msoThemeColorAccent6 = 10の部分を記述しないで試したことがありました。むしろ問題は、折れ線グラフの場合、.InteriorではなくBorderだと知りませんでした。恥ずかしい限りです。 あと、余分なことですが、質問のVBS文の中に横軸項目の設定部分を記述するのを忘れていました。 ex.ActiveChart.SeriesCollection(1).XValues =eb.Range("b1").Resize(1, sW-1)

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>グラフの色を変える方法をご教授願います。 >ex.ActiveChart.SeriesCollection(1).Name =eb.Range("a2") ex.ActiveChart.SeriesCollection(1).Interior.Color = RGB(0,0,255)'青 ・・・・・ > ex.ActiveChart.SeriesCollection(2).Name =eb.Range("a4") ex.ActiveChart.SeriesCollection(2).Border.Color = RGB(255, 0, 0)'赤

turu575
質問者

お礼

早速の回答有難うございました。 ex.ActiveChart.SeriesCollection(1).Interior.Color = RGB(255,0,0) ex.ActiveChart.SeriesCollection(2).Border.Color = RGB(0,0,255) なのですね、私は ex.ActiveChart.SeriesCollection(1).Interior.ColorIndex = 3 みたいなことをしていました、棒グラフで最初.試した時Color にしていましたがInteriorを入れませんでした。次にInteriorを入れたときは、ColorIndex = 3にして等など・・・ .Interior.Color= RGB(10進)とは勉強になります。 本当に有難うございました。

関連するQ&A

  • PowerShellでExcel操作をする

    昔、水平タブ区切りの集計データをコピーし下記のVBSでExcelに貼り付けグラフ化する事をしていました。 今回PowerShellで同じようなことができないかと思い挑戦しています。簡単なExcel操作はなんとかなりますが範囲の取得やそれを利用した指定等を組み込んだ場合上手く行きません。 そこで下記のVBSで行ったExcel操作をPowerShellで実現する方法をお教えください。 Option Explicit Dim ex,eb,eg,sD,chart,newChartObject ' Excel起動 Set ex=CreateObject("Excel.Application") ex.Visible=True ' ワークブックを追加 Set eg=ex.Application.Workbooks.Add() Set eb=eg.Sheets(1) ' 新規グラフ(座標は、グラフのエリア) Set chart =eb.ChartObjects() Set newChartObject = chart.Add(300, 100, 400, 300) ' グラフデータを代入 eb.Range("A3").PasteSpecial ' グラフデータをの範囲取得(最終行及び最終列) sD = eb.Range("B3").End(-4121).Row eb.Range("B3").Resize(sD-1, 1).NumberFormatLocal = "#,###" eb.Range("D4").Resize(sD-3, 1).NumberFormatLocal ="0.00%" ' 参照範囲の設定 ex.ActiveSheet.ChartObjects("グラフ 1").Activate ex.ActiveChart.SetSourceData eb.Range("A3").Resize(sD-2 , 2) ex.ActiveChart.SeriesCollection(1).Values = eb.Range("B4").Resize(sD-3 , 1) ex.ActiveChart.SeriesCollection(1).Name =eb.Range("B3") ex.ActiveSheet.ChartObjects(1).Chart.ChartStyle = 32 '第2データの指定 ex.ActiveChart.SeriesCollection(2).ChartType = 4 '折れ線グラフ ex.ActiveChart.SeriesCollection(2).Values = eb.Range("D4").Resize(sD-3 , 1) ex.ActiveChart.SeriesCollection(2).AxisGroup = 2 ex.ActiveChart.SeriesCollection(2).Name =eb.Range("D3") Set eg=Nothing Set eb=Nothing Set ex=Nothing 宜しくお願いします。

  • VBAで各シートの表でグラフを作成したいのですが

    シートごとにレイアウトが同じ表がありまして、 VBAで各シートの表でグラフを作成したいのですが、 どうしても作成した時のシートのデータで出来てしまいます。 egシート1で表作成>シート2でVBA実行してもシート1でつくったグラフが複製されるだけ、、 どうすれば、選択中のシートのデータで表ができるのでしょうか?? 一度グラフをコピーした上でデータを変える方法も試したのですが、 Sub Macro7() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).Name = "=Sheet2!$B$29" ActiveChart.SeriesCollection(1).Values = "=Sheet2!$B$31:$B$128" 結局シート2でしか出来ず、、です 「Sheet2!~」のところがいけないのはわかるのですが、、 この方法以外でもどんな方法でもよいのでどなたかお力かしてください。

  • エクセルのグラフ

    グラフが貼り付けられているシートを見えない状態でグラフ描画したいのですがうまくいきません ちなみに、今のコードはこうです。 Sub 電力力率表示() ActiveSheet.ChartObjects("グラフ 3").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SetSourceData Source:=Sheets(s_NAME) _ .Range("A2:C146"), PlotBy:=xlColumns End Sub

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • マクロでグラフを作成したい

    Charts.Add ActiveChart.ChartType = xlXYScatterLinesNoMarkers For i = 1 To 25    ActiveChart.SeriesCollection.NewSeries    ActiveChart.SeriesCollection(i).XValues = "=APC!"(3,X)":"Range(lngYCut,X)    ActiveChart.SeriesCollection(i).Values = "=APC!Cells(3,Y):Cells(lngYCut,Y)"    ActiveChart.SeriesCollection(i).Name = "=APC!R1C&X"  X = i * 3 + 1   Y = i * 3 + 2 Next 上記のプログラムでグラフを作成しています。(X,Y,lngYCutは事前に定義しています。) 25個のデータをグラフにする為、For文の中でグラフデータを1つずつ追加していこうと思っています。 データ範囲を変数で指定したいため、=のあとを変えないといけないと思っています。 ただ=のあと""で囲っているため、文字として入力しているんだと思います。 その文字列として入力している場所にどうにかして変数を使いたいです。 どなたか ActiveChart.SeriesCollection(i).XValues = のあとに変数を使用できる方法を教えてください

  • VB2005でExcelのグラフのデータ範囲を設定したい

    VB2005で既存のExcelのグラフのデータ範囲を設定したいのですが どなたか教えてください。 VB6.0では下記のコードで実現できましたが VB2005ではいろいろ調べたり変更してみたりしたのですが実現できませんでした OSはWindows2000でExcelも2000です Dim ExAp As Excel.Application Dim ExBook As Excel.Workbook Dim ExSheet As Excel.Worksheet On Error GoTo er Set ExAp = CreateObject("Excel.Application") Set ExBook = ExAp.Workbooks.Open("C:\ファイル名.xls") Set ExSheet = ExBook.Worksheets("シート名") ExAp.Visible = True ExSheet.Activate ExSheet.ChartObjects("グラフ 1").Activate With ActiveChart .SeriesCollection(1).XValues = ExSheet.Range("B21:B24") .SeriesCollection(1).Values = ExSheet.Range("C21:C24") End With Exit Sub er: Set ExSheet = Nothing Set ExBook = Nothing Set ExAp = Nothing MsgBox Err.Description

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

    エクセルのグラフの操作 初歩的でスミマセンが、よろしくお願いします。 エクセルのグラフのデータの内容を1セルずつ下に下げて、それを400回繰り返したいんです。 'wave-h'!R402C3と'wave-h'!R402C4を 'wave-h'!R403C3と'wave-h'!R403C4にして 'wave-h'!R867C3と'wave-h'!R867C4にまでしたいのですが。 do loopを考えてるんですが、引数?が上手くいかなくて・・・。 ついでにその後グラフをコピーしてペイントに貼り付けてJPGで保存する予定です。 これを400回以上繰り返すんですが、ペイントのコピーのところまではエクセルのVBAで可能でしょうか。よろしくお願いします。 ActiveSheet.ChartObjects("グラフ 4").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SeriesCollection(2).XValues = "='wave-h'!R402C3" ActiveChart.SeriesCollection(2).Values = "='wave-h'!R402C4" ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(2).Select ActiveChart.ChartArea.Select ActiveChart.ChartArea.Copy

  • マクロでグラフのデータ範囲を換える

    散布図のグラフの参照データをマクロによって変更したいのですが、エラーが出て困っています。どこが誤っているのかご指摘いただければ幸いです。 ワークシート2にあるグラフ1について、 その1つ目のグラフを変更したい。 xの値をワークシート1の (a,7)~(z,7)に yの値を同じく(a,10)~(z,10)にしたいと思っています。 このオブジェクトはこのプロパティかメソッドをサポートしないとのエラーが出ます。 Set range1 = worksheets(1).Range(Cells(a, 7), Cells(z, 7)) Set range2 = worksheets(1).Range(Cells(a, 10), Cells(z, 10)) With Worksheets(2).ChartObjects("グラフ 1") .SeriesCollection(1).XValues = range2 .SeriesCollection(1).Values = range1 End With

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

    マクロ初心者です。 あるグラフを最初テンプレートで作っておいて、他のデータでも簡単に同じグラフを作れるようにしたいです。 マクロの記録で「相対参照」があったので、これでできると思ったのですが、グラフのセルは絶対参照になるようです。下記のようになってりまいます。 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列進んだセル" というふうにしたいです。 ご指導お願いします。

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

専門家に質問してみよう