VBAで散布図に系列を追加する方法

このQ&Aのポイント
  • Excel2007でVBAを使用して、散布図に新しい系列を追加する方法について教えてください。
  • 現在、系列1がありますが、横軸がA1:A10、縦軸がB1:B10のデータを追加したいです。
  • いくつかの方法を試しましたがうまくいかず、エラーが発生してしまいます。正しいマクロの書き方を教えてください。
回答を見る
  • ベストアンサー

EXCEL2007 <VBAで散布図の系列の追加>

EXCEL2007 <VBAで散布図の系列の追加> 標記の通り、VBAで散布図に新たに系列を追加したいのです。 たとえば現在、系列1があるとします。 そこで、横軸がA1:A10、縦軸がB1:B10のデータを追加するとします。     ActiveChart.SeriesCollection.Add Range("A1:B10") しかし、このマクロだと縦軸がA1:A10の系列2と縦軸がB1:B10の系列3ができてしまします。 そこで、ためしに     ActiveChart.SeriesCollection.Add Range("A1")   '仮に作る     With ActiveChart.SeriesCollection(2)       .XValues = Range("A1:A10")       .Values = Range("B1:B10")     End With とすると、「実行時エラー'1004'; アプリケーション定義またはオブジェクト定義のエラーです。」となります。 いろいろ検索したのですが、これと言ったのがみつかりません。 意図するマクロはどのようなものになるのでしょうか。 ご教示お願いします。

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

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

NewSeriesメソッドで系列が追加出来ます。 ActiveChartがグラフシートならセルは持っていません。 よって .XValues = Range("A1:A10") は成立しません。 元データがあるシート名を明記してください。 ≪例1≫ With ActiveChart.SeriesCollection.NewSeries   .XValues = Sheets("Sheet1").Range("A1:A10")   .Values = Sheets("Sheet1").Range("B1:B10") End With ≪例2≫ With Charts("Graph1").SeriesCollection.NewSeries   .XValues = Sheets("Sheet1").Range("A1:A10")   .Values = Sheets("Sheet1").Range("B1:B10") End With ≪例3≫ With Charts(1).SeriesCollection.NewSeries   .XValues = Sheets("Sheet1").Range("A1:A10")   .Values = Sheets("Sheet1").Range("B1:B10") End With

t000506g
質問者

お礼

そうですね。Sheets("Sheet1").を加えないとだめですね。 いつも的確なご回答ありがとうございます。

その他の回答 (1)

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

シート上グラフの場合で、 既に系列1があって、グラフを選択して標準モジュールの以下コードを実行すると >ActiveChart.SeriesCollection.Add Range("A1")   '仮に作る >With ActiveChart.SeriesCollection(2) >  .XValues = Range("A1:A10") >  .Values = Range("B1:B10") >End With これでもうまく行きます。 どの行でエラーが出てますか? 以下も試してみてください。 Sub test()   With ActiveSheet.ChartObjects(1).Chart.SeriesCollection.NewSeries     .XValues = Range("A1:A10")     .Values = Range("B1:B10")   End With End Sub

t000506g
質問者

お礼

すみません、埋め込みグラフではありませんでした。 埋め込みグラフのシートとデータのシートが同じであれば上記でうまくいくということですね。 ご回答どうもありがとうございます。

関連するQ&A

  • [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列したいのですが、そのためにはどうすれば良いでしょうか。ご教授ください。

  • Excel VBAの散布図について

    Excel VBAで散布図を作ろうと考えています。 元のデータは添付した画像のものです。 左端にXの値があって、それ以降7列ごとに8枚の散布図を作成しようと考えております。 そこで、kを1~8まで動かし8種類の散布図を作成しようと考えているのですが、このマクロではk=1だけプログラムを回しただけで、一枚のグラフにすべての系列が載ってしまいます。 kを動かさずに、Cellの位置を指定して回した際にはうまくいったのですが、kを動かすようにしたところうまくいきません。 散布図を作る際に系列の数(私の場合7種類)を指定するにはどうしたらよいでしょうか。 どなたかご教授ください。 For k = 1 To 8 ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SeriesCollection(1).Name = Sheets("Voltammogram").Cells(10, -5 + 7 * k) ActiveChart.SeriesCollection(1).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(1).Values = Sheets("Voltammogram").Range(Cells(12, -5 + 7 * k), Cells(250, -5 + 7 * k)) ActiveChart.SeriesCollection(2).Name = Sheets("Voltammogram").Cells(10, -4 + 7 * k) ActiveChart.SeriesCollection(2).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(2).Values = Sheets("Voltammogram").Range(Cells(12, -4 + 7 * k), Cells(250, -4 + 7 * k)) 以降7列まで続きます。

  • excel2010 マクロでの散布図作成

    excel2010で、ログを整理して複数のグラフを自動作成するマクロを作成しています 散布図の作成手順を記録した後、変数を当てなおしマクロを走らせると記録時と異なる挙動を示し、記録時にはひとつしか作成しなかった系列が25個くらい作成されました 下記マクロでおかしなところがあればご指摘ください ------------------------------ sheetname2 = ActiveSheet.Name ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" ActiveChart.SeriesCollection(1).XValues = "='" & sheetname2 & "'!$A$2:$A$" & y3 ActiveChart.SeriesCollection(1).Values = "='" & sheetname2 & "'!$E$2:$E$" & y3 ------------------------------- 作りたいグラフ:散布図 系列 「アクティブシート」のセルE1 x軸  「アクティブシート」のセルA2~A「y3」 y軸  「アクティブシート」のセルE2~E「y3」 なお、シート名を固定すると色々と問題があるため、変数としてあります また、変数y3は別途取得してありますが、省略いたします

  • コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003)

    コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003) 気温を横軸、降水量を縦軸とし、1月と2月の散布図を作りました。 A列 1月気温(31データ) B列 1月降水量(31データ) C列 2月気温(28データ) D列 2月降水量(28データ) 2月のグラフ(C,D列)をコピーして1月(A,B列)のグラフに貼りつけ、1枚のグラフに2系列のデータがある状況です。 ここで、2月の降水量の系列を指定する方法を教えてください。 2月のデータの書式を変更したいのですが、 ActiveChart.SeriesCollection(2).Select としても、なぜか1月の系列が選択されてしまい、うまくいきません。 よろしくお願いします。

  • エクセルの散布図にラベル(系列が2つ)

    エクセルの散布図にラベルを付けたいのですが、 いろいろ試しているのですが上手くいきません。(マクロ初心者です。) OKwaveにある質問も見たのですが、同じような状況が見当たらず困っていました。 http://support.microsoft.com/kb/213750 ↑「microsoft サポートオンライン」 のマクロを参考にし、やってみたのですが、系列が1つしかない場合は上手くいくのですが、系列2つでやると 「オブジェクト変数またはwithブロック変数が設定されていません」 というエラーが出てきてしまいます。 どなたかお知恵を貸していただければ幸いです。 ・一つのグラフに系列が2つあり、それぞれいくつかのデータがある。  (例えば、下のデータのB2:C4は系列1「野菜」、   B5:C7は系列2「果物」となっている。) A1:ラベル_____B1:X軸____C1:Y軸 A2:キャベツ___B2:12______C2:5 A3:トマト_____B3:9_______C3:7 A4:キュウリ___B4:5_______C4:3 A5:イチゴ_____B5:4_______C5:8 A6:ミカン_____B6:1_______C6:4 A7:リンゴ_____B7:1_______C7:4 この表で 一つの表に2系列をおさめ、 なおかつそれぞれの点に「キャベツ」「イチゴ」などのラベルを表示したいと思っています。 「系列1」の点は「■」「系列2」の点は「●」と分けてあります。 実際にはもっとデータ数が多いため、系列を全て分ける、というのは難しいです。 VBAを使って出来るやり方がありましたら是非教えて下さい。 なお、サポートオンラインからコピーして使った マクロは以下のとおりです。 Sub AttachLabelsToPoints() 'Dimension variables. Dim Counter As Integer, ChartName As String, xVals As String ' Disable screen updating while the subroutine is run. Application.ScreenUpdating = False 'Store the formula for the first series in "xVals". xVals = ActiveChart.SeriesCollection(1).Formula 'Extract the range for the data from xVals. xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _ Mid(Left(xVals, InStr(xVals, "!") - 1), 9))) xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1) Do While Left(xVals, 1) = "," xVals = Mid(xVals, 2) Loop 'Attach a label to each data point in the chart. For Counter = 1 To Range(xVals).Cells.Count ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _ True ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _ Range(xVals).Cells(Counter, 1).Offset(0, -1).Value Next Counter End Sub どうぞよろしくお願いします。

  • VBAで散布図を作成したのですが・・・

    VBAで散布図を作成したいのですがうまくいかないで困っています。 この散布図はA行とB行をそれぞれ軸として指定しているのですがうまくX軸、Y軸に指定されず2本のグラフが表示されてしまいます。 また範囲指定をC1を変数としてA1からB○まで取りたいのですが最初の範囲指定はうまくいったのですが最後の行の指定がうまくいかずエラーになってしまいます。 (○は"C1の値+4"にしたいのです。) よろしければ何かヒントでもいいので教えていただけないでしょうか?よろしくお願いします。 (私が書いたVBA↓) Sub chart1() Dim sh1 As Worksheet Set sh1 = Worksheets("Sheet1") Dim i As Integer i = Range("C1").Value + 4 Range(Cells(1, 1), Cells(i, 2)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmooth ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 2))

  • Excel2000でのVBAによる散布図の値の表示について

    Excel2000の散布図の機能を使って、 時系列データを折れ線で表示させています。 あるデータの値だけをラベルとして表示させたいのですが、うまくいきません。 例えば、tとYのデータ t,Y 1,70 2,40 3,60 4,30 5,100 6,10 7,30 8,80 9,20 10,90 があるとして散布図で時系列表示させてYの値が50以上のポイントだけそのYの値をラベルとして表示させたいのです。 過去の質問を参考にして以下のようなVBAのプログラムを作ったのですがうまくいきません。 Sub Label() Dim i As Integer ActiveSheet.ChartObjects(1).Activate ActiveChart.ApplyDataLabels For i = 1 To Range("B1", Range("B1").End(xlDown)).Cells.Count If ActiveSheet.Cells(i, 2).Value > 50 Then ActiveChart.SeriesCollection(1).Points(i).DataLabel.Text = ActiveSheet.Cells(i, 2).Value End If Next i End Sub 一つ一つのポイントの値をグラフ上で消去したり入力するのは非常に大変なので、うまい方法がないか考えているところです。 今、Excel2000を使っています。 どなたか分かる方がおられましたら教えてください。 よろしくお願い致します。

  • EXCELVBAグラフ凡例表示部分の系列の名称非表

    すいません。VBAの記述の方法がわからないのでお手数ですが教えてください 使用アプリ・使用OS:Excel2010 VBA Windows7 ■教えてほしい内容 グラフを作成し、その後以下のVBAでグラフの系列を追加しています。 dk = ActiveChart.SeriesCollection.Count + 1 ActiveChart.SeriesCollection.NewSeries '系列名の設定 ActiveChart.SeriesCollection(dk).Name = "cp-" & dk 'y軸の値設定 ActiveChart.SeriesCollection(dk).Values = "={" & aaa & "}" '散布図設定 ActiveChart.SeriesCollection(dk).ChartType = xlXYScatter その後、グラフの凡例部分でこの追加した系列cp-○の凡例内の系列を非表示にしたいのですがわかりません。 申し訳ありませんが教えてください。

  • エクセルVBA_散布図について

    アクティブになっているセルで散布図を描こうとするとX、Yが別々に記載され、2本の線になってしまいます。 例えば、A1~A3に1~3が、B1~B3に1~3が記入されているとして、A1-B3を下記のように自動で選択し、散布図で記載したいと考えております。 Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveSheet.Shapes.AddChart.Select With ActiveChart .ChartType = xlXYScatterLines End With どうにか、再度選択せずに、A1~A3をX軸に変更する方法はないでしょうか? なお、上記自動で再選択したいので、セルの範囲は決まっておりません。 何かお知恵をお借りできると助かります。

  • EXCEL VBAで散布図の作成

    EXCELのVBAを使って散布図を作成したいと考えているのですがどのようにVBAを組めばいいか悩んでいます。 時間   温度A 温度B ・・・・ 11:00 15 14  ・・・・ 12:00 16 18  ・・・・ 13:00 18 19  ・・・・ というデータがあります。 これをフォームなどで選択した項目だけを 散布図(横軸:時間 縦軸:温度)にしたいのですが きっかけや考え方だけでも教えてください。 お願いします。

専門家に質問してみよう