• 締切済み

VBAでの、Excelグラフの項目軸の指定方法

エクセルグラフ作成にて、棒グラフ、X軸の項目名を指定するVBAでの方法を求めています。 エクセルのウィザード2/4「系列」にて、項目軸の設定ができますが、それをVBAにてやりたいのです。 ウィザードでは、下記のように指定  ='xxxxxxxx'!R2C25:R13C25 レコード機能で、これをキャッチすると、 ActiveChart.SeriesCollection(1).XValues = "=' xxxxxxxx '!R21C25:R30C25" ActiveChart.Location Where:=xlLocationAsObject, Name:=" xxxxxxxx " ‘--------ChartObject化する 小生は、Chartobjectにて、グラフを作成、上記を使って、項目名を指定しようとしました。 ActiveChart.SeriesCollection(1).XValues = "=' xxxxxxxx '!R21C25:R30C25" これは、うまくいきました。しかし、変数を使うと、途端に駄目です。 例えば、 temp1="xxxxxxxx" temp2="R21C25:R30C25" temp="=" & temp1 & "!" & temp2 として ActiveChart.SeriesCollection(1).XValues =temp これは、うまくいきません。 よろしくお願いいたします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

activechartが指定されている状態でないと,その命令はうまくいきません。 ご相談に掲示された範囲には特に間違いはないので,たぶんグラフを「選んで」マクロを実行していないのでしょう。 まずは手動でグラフを選んでから,とりあえずそのマクロを試します。 #次のステップとして,「グラフを選ばなくても」実行できるよう,activeなんたらを使わないマクロを書けるように更に勉強を進めてみてください。

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

エラーが出て止まるのですか? エラーはどんな内容ですか? どう上手くないのか具体的に教えてください。 出来ればコード全体を拝見することは出来ないでしょうか。 因みに、当方では提示されたコードで上手く動作しました。 ≪参考≫ グラフ操作関連のテクニック http://moug.net/tech/exvba/0021.htm

関連するQ&A

  • Excellのvbaにおける、グラフの設定

    このたびは、Excellのvbaにおける、グラフの設定がわからず質問させていただきます。 具体的に、行いたいこととしましては、 円グラフを新規に作成し、データ範囲を指定し、グラフを表示させるということをしたいと考えております。 しかし、項目軸ラベルに使用するデータの設定がうまくいきません。 以下にソースコードをのせますのでアドバイス願います。 Sub AddGrafh()      Range("J4:O4").Select      Dim NowSheetName As String   NowSheetName = ActiveSheet.Name      ActiveSheet.ChartObjects.Add(50, 200, 338, 220).Select   ActiveChart.ChartType = xlPie   ActiveChart.ChartWizard Source:=Range("J4:O4"), PlotBy:=xlRows   ActiveChart.SeriesCollection(1).Name = "=""項目別支出割合"""   ActiveChart.ChartTitle.Font.Size = 14     ActiveChart.SeriesCollection(1).XValues = """=" & NowSheetName & "!$J$3:$O$3"""      End Sub 上記の ActiveChart.SeriesCollection(1).XValues = """=" & NowSheetName & "!$J$3:$O$3""" という箇所の記述がおかしいのですが、なんてかいてよいかわかりません。 ちなみに、項目軸ラベルに設定したいデータは、現在のシートのJ$3:$O$3です。 よろしくお願いします。

  • Excel VBAのグラフ化自動マクロがうまくできません。

    Sub 自動グラフ作成() For i = 5 To 32 Step 3 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=distance!R18C1:R1009C1" ActiveChart.SeriesCollection(1).Values = "=distance!R18C" & (i + 2) & ":R1009C" & (i + 2) Next End Sub 上記のように表の中の決められたセルからデータを取り出して自動的にグラフを作成してくれるマクロを作成したのですが、奇数個めのグラフは正常に生成されるのですが、偶数個めのグラフになぜか x= y=distance!$M$18:$M$1009 x= y={1} みたいな必要なグラフ以外に上記の2つのグラフを混じってしまいます。これってどこがおかしいのでしょうか? どなたか助けて下さい。 お願いいたします。

  • 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:2つの異なるシートからグラフを作成する

    VBA初心者です。(はじめてから3日目。。。) もしかすると、すごい簡単なことなのかもしれなくて申し訳ないのですが、質問させてください。 二つの異なるシートのデータを使って、円グラフを作製しようとしています。 ですが、「アプリケーション定義またはオブジェクト定義のエラー」が出てしまいます。 どこが間違っているのかをご教授願えませんでしょうか。 よろしくお願いします。 Sub graph() Charts.Add With ActiveChart .ChartType = xlPie .SeriesCollection(1).XValues = Worksheets(1).Range(Cells(2, 3), Cells(2, 5)) .SeriesCollection(1).Values = Worksheets(2).Range(Cells(3, 2), Cells(3, 4)) .SeriesCollection(1).Name = Worksheets(1).Cells(1, 1) .Location where:=xlLocationAsObject, Name:="sheet3" End With End Sub ちなみに、各セルにはちゃんとデータが入っております。 よろしくお願いいたします。

  • VBAでグラフの範囲指定

    VBAでグラフ範囲指定について 先日質問させて頂いたのですが、行き詰ってしまったのでどうかご指南ください。 只今、sheet1データ一覧をダブルクリックした際にsheet2へ移り、表の詳細データが記入されるツールを作っています。 sheet2には表詳細データ以外にも、空白を挟んで他のデータが記入され、詳細データの散布図グラフが挿入されています。 sheet2に移り詳細データが表示されるようには出来ているのですが、表は12行に項目、13行からデータが始まるのは固定で、終わりの行はその都度変わるため、sheet1のダブルクリックした際のシート移動の処理の中に記述し、sheet2に記入された表データを参照して散布図のグラフを挿入したく思いました。 Dim ws2 As Worksheet Dim logGYO As Long Dim j As Long Dim x軸 As Variant Dim 系列1y軸 As Variant Dim 系列2y軸 As Variant Dim GYOMAX As Long Set ws2 = Worksheets("sheet2名前") ws2.ChartObjects("詳細グラフ").Activate ActiveChart.ChartArea.Select logGYO = 13 j = 13 Do Until ws2.Cells(j, 1).Value = "" j = j + 1 Loop GYOMAX = j - 1 With ws2 x軸 = .Range(.Cells(logGYO, 1), .Cells(GYOMAX, 1)) 系列1y軸 = .Range(.Cells(logGYO, 2), .Cells(GYOMAX, 2)) 系列2y軸 = .Range(.Cells(logGYO, 4), .Cells(GYOMAX, 4)) End With With ActiveChart.SeriesCollection(1) .XValues = x軸 .Values = 系列1y軸 .Name = "=""系列1名前""" End With With ActiveChart.SeriesCollection(2) .XValues = x軸 .Values = 系列2y軸 .Name = "=""系列2名前""" End With 実行したところ、「SeriesクラスのXValuesプロパティを設定できません」とエラーが出てしまいます。 SeriesCollection(1).Formula = "=SERIES(" & Range("B12")~ とFormulaと記述を変えて試してもみたのですが、「SeriesクラスのFormulaプロパティを設定できません」とエラーが出ます。 2週間程前までExcel自体を殆ど使ったことが無かった初心者のため、見当外れな質問をしていたら申し訳ありません。 どうか宜しくお願い致します

  • 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:="データ抽出用シート" 宜しくお願いします。

  • ExcelVBA 変数を使って項目軸ラベルを追加するには

    Excel2000 VBAで 一度作ったグラフに 項目軸ラベルを追加しようとすると エラーが出ます. Dim MyWorkBookName As String Dim MySheetName As String Dim LastRow As Integer MyWorkBookName = ActiveWorkbook.Name MySheetName = ActiveSheet.Name LastRow= 52 With ActiveChart .SeriesCollection(1).XValues = _ Workbooks(MyWorkBookName). _ Worksheets(MySheetName). _ Range(Cells(2, 6), Cells(LastRow, 6)) End With 変数を使って表したいのですが...

  • エクセル グラフ データラベルにX軸の値を表示

    VBAでエクセルのグラフにX軸の値を表示させる方法を教えて下さい。 このように書いているのですが、Type:=xlCategoryでエラーとなってしまいます。 For i = 1 To ActiveChart.SeriesCollection(1).Points.Count ActiveChart.SeriesCollection(1).Points(i).HasDataLabel = True ActiveChart.SeriesCollection(1).ApplyDataLabels Type:=xlCategory Next i Y軸を表示させるxlValueではエラーとならず、Y軸の値が表示されました。 教えて下さい。 宜しくお願い致します。

  • [VBA Excel] 2系列の散布図を書いてみるとおかしくなります・・・

    Excel 2007とVBAで数値解析をしています。計算結果のグラフを表示するための準備段階として、次のようなプログラムを組んで、2系列の散布図を書いて見ました。 Option Explicit Sub makechart()   Dim chart1 As ChartObject, wsh As Worksheet   Set wsh = Sheet1   Set chart1 = wsh.ChartObjects.Add( _   10, 20, 250, 200)   With chart1.Chart    .ChartType = xlLineStacked    .SeriesCollection.NewSeries    .SeriesCollection(1).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(1).Values = _     wsh.Range("B1:B5")   End With   With chart1.Chart    .SeriesCollection.NewSeries    .SeriesCollection(2).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(2).Values = _     wsh.Range("C1:C5")   End With End Sub --sheet1--   A B C ----------- 1| 1 2 3 2| 2 3 4 3| 3 4 5 4| 4 5 6 5| 5 6 7 系列1のグラフはB列 対 A列という意図通りのものになったのですが、系列2のグラフは、Y軸の値が、C列の値にB列の値を足したもの (1,2+3)、(2,3+4) ・・・ になってしまいました。系列2のグラフも純粋にC列 対 A列したいのですが、そのためにはどうすれば良いでしょうか。ご教授ください。

  • VBAのグラフに違うシートの系列の追加について??

    VBAでグラフに新たな系列を追加しようと思い 以下のプログラムを書きました。 しかしながら、 . Valuesの値の指定の場所でエラーが発生しました。 また、 .XValues = Sheets(シート名(o)).Range(Cells(2, 1), Cells(行の数 + 1, 1)) .Values = Sheets(シート名(o)).Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1)) を .XValues = Range(Cells(2, 1), Cells(行の数 + 1, 1)) .Values = Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1)) に直すとうまくいきました。 別のシートの値をグラフに設定する方法がわかっていないみたいなのですが、 やり方がよくわかりません。 もし、わかる方がいたら教えていただけないでしょうか? よろしくお願いします。 以下、書いたプログラムです。 o=2 ActiveSheet.ChartObjects("グラフ1 " ).Activate ActiveChart.SeriesCollection.NewSeries 'グラフの種類・データの範囲・凡例・2軸の使用を指定します With ActiveChart.SeriesCollection(o) 'グラフの種類を設定 折れ線グラフ .ChartType = xlXYScatterLines 'データの指定 .XValues = Sheets(シート名(o)).Range(Cells(2, 1), Cells(行の数 + 1, 1)) '←ここでエラーが出ます。 .Values = Sheets(シート名(o)).Range(Cells(2, p + 1), Cells(行の数 + 1, p + 1)) '凡例の指定 .Name = シート名(o) End With

専門家に質問してみよう