Excel VBAで複数プロットのグラフを作成する方法

このQ&Aのポイント
  • ExcelのVBAを使用して、複数プロットのグラフを作成する方法について説明します。
  • まず、各列のデータを指定してグラフを作成し、その後に追加のプロットを行うことで、目的のグラフを作成することが可能です。
  • また、行数と列数に任意の値を代入し、Forループを使用することで、様々な形態のグラフに対応することができます。
回答を見る
  • ベストアンサー

Excel VBAでグラフ作成。A,C列をx値, B,D列をy値にした複数プロット

ExcelのVBAでグラフをChartType = xlXYScatterLinesでグラフを作っています。仮に各列10行でAからF列までデータがあるとします。 Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170) With chartObj.Chart .ChartType = xlXYScatterLines .SetSourceData Worksheets(1).Range("A1:F10"), _ PlotBy:=xlColumns .HasLegend = False End With 上記のようにしてしまうと、x値がA1:A10で、y値がB1:B10,C1:C10・・・・のプロットが5本作成されてしまいます。 以下のようにするにはどうすればよろしいでしょうか。 第一のプロットはx値をA1:A10, y値をB1:B10としてグラフを作成します。次にこのグラフにx値をC1:C10, y値をD1:D10とした第二のプロットを追加、同様に第三はx値をE1:E10, y値をF1:F10としてプロットを追加したグラフを作成したいのですが、このようなグラフはVBAで作成可能でしょうか。 本番のグラフは行数と列数はいろいろな場合があるので、行数と列数のパラメータに任意の値を代入し、Forループで様々な形態に対応できるものを作りたいと考えています。

  • phy0
  • お礼率76% (148/193)

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

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

Dim chartObj As ChartObject Dim r As Range Dim i As Long Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170) Set r = Worksheets(1).Range("A1:F10") With chartObj.Chart   .ChartType = xlXYScatterLines   .HasLegend = False   For i = 1 To 5 Step 2     With .SeriesCollection.NewSeries       .XValues = r.Columns(i)       .Values = r.Columns(i + 1)     End With   Next End With Set r = Nothing Set chartObj = Nothing ...こんな感じ。 普通に手作業で作成するものをマクロ記録すればヒントになるでしょう。 後から系列を追加すればいいわけです。 >本番のグラフは行数と列数はいろいろな場合があるので... ...に対応させる一例としては以下。 Const MN = 1 'データ開始行 Const MX = 10 'データ個数 Dim chartObj As ChartObject Dim x, y Dim z As Long Dim i As Long x = VBA.Array(1, 3, 5) 'x値の列 y = VBA.Array(2, 4, 6) 'y値の列 Set chartObj = ActiveSheet.ChartObjects.Add(170, 170, 280, 170) With chartObj.Chart   .ChartType = xlXYScatterLines   .HasLegend = False   For i = 0 To UBound(x)     With .SeriesCollection.NewSeries       .XValues = Cells(MN, x(i)).Resize(MX)       .Values = Cells(MN, y(i)).Resize(MX)     End With   Next End With Set chartObj = Nothing

phy0
質問者

お礼

ありがとうございます。おかげさまで希望のものができました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Excelのグラフでは無理がありそうです 単一X軸と 2軸(左右)のY軸なら可能でしょうけど ・・・

関連するQ&A

  • y=ax+bのグラフから求まるy’=(y-b)/aの意味は?

    同じ資料を測定器A,Bで測定し、xを資料番号、yを測定値としてグラフ1を作成しました。測定値は以下のようになっています。 資料 測定値A 測定値B 1   0.18   0.21 2   0.18   0.21 3   0.22   0.245 4   0.261   0.295 5   0.318   0.337 6   0.371   0.395 7   0.43   0.455 8   0.507   0.53 9   0.593   0.617 10   0.7    0.718 11   0.843   0.853 12   1.032   1.024 13   1.243   1.232 14   1.5    1.453 15   1.792   1.767 16   2.167   2.089 17   2.457   2.382 18   2.784   2.68 19   3.129   2.998 20   3.496   3.289 21   3.771   3.535 22   4.00    3.75 23   4.168   3.918 24   4.308   4.062 25   4.412   4.146 次に、xを測定値A、yをそれぞれの測定値にしてグラフ2を作成すると、グラフAは y=x、グラフBはy=ax+bの近似直線を持つグラフになります。このa,bで作成 する式y’=(y-b)/aへ測定値Bを代入すると、求まるy’は、グラフ1上でプロット しても、グラフA上になりました。 このとき、”式y’=(y-b)/aを、測定器Bによる測定値を測定器Aで測定した場合に換算する式” とすることは、正しいのでしょうか??

  • EXCELのグラフ作成でB列をY軸にしたいのですが…

    タイトル通り、EXCELのグラフで、B列とC列のデーターを使って散布図でグラフを作成したいのですが、そのまま作成するとB列=X軸。C列=Y軸になり、毎回元データの系列で値の変更をします。 同じようなグラフを作成するのでめんどくさいんですが、何か簡単な方法はありますか? よろしくおねがいします

  • VBAによるリアルタイムグラフ作成

    あらかじめ作成されている散布図のグラフにデータを追加しプロットしていきたいと思い、決められたセルに入力されたデータをVBAでグラフにプロットするところまでは何とか作れました。 追加するデータをセルに入力すると自動的に散布図にプロットする方法についてご教示頂けないでしょうか。 ◯データを入力するセル '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 ・ ・ ・ A列は、系列名でデータラベルとして使用 B列は、横軸 C列は、縦軸 ◯あらかじめ作っている散布図には、閾値を事前に7つのデータ系列をつかってプロットしていますので、追加されたデータのインデックスは8からになります。 ◯追加するデータ数は未知数 ◯可能でしたら、セルに入力されたデータを消すとき、グラフのデータ系列も一緒に消える よろしくお願いします。 Sub グラフ描画() '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 Dim chartObj As ChartObject Set chartObj = ActiveSheet.ChartObjects(1) With chartObj.Chart ' データセット .SeriesCollection.NewSeries .FullSeriesCollection(8).Name = "=Sheet1!$A$3" .FullSeriesCollection(8).XValues = "=Sheet1!$B$3" .FullSeriesCollection(8).Values = "=Sheet1!$C$3" ' マーク設定 .FullSeriesCollection(8).Format.Fill.Visible = msoTrue .FullSeriesCollection(8).MarkerStyle = xlMarkerStyleCircle .FullSeriesCollection(8).MarkerSize = 6 .FullSeriesCollection(8).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) .FullSeriesCollection(8).Format.Line.Visible = msoTrue .FullSeriesCollection(8).Format.Line.ForeColor.RGB = RGB(255, 0, 0) ' データラベル設定 .FullSeriesCollection(8).ApplyDataLabels .FullSeriesCollection(8).DataLabels.ShowSeriesName = True .FullSeriesCollection(8).DataLabels.ShowValue = False .FullSeriesCollection(8).HasLeaderLines = False .FullSeriesCollection(8).DataLabels.Position = xlLabelPositionAbove End With End Sub

  • a<y<b c<x<d

    私の愛用している参考書にa<y<b c<x<d なら a-d<y-x<b-c (確か)  と書いてありました。 実際に数を代入して考えたら成り立つのですがいまいちなぜこの式になるのかが分かりません。 誰理解できる方証明の方お願いしますm(__)m

  • エクセルのグラフ(y=x^2)

    エクセルでy=x^2のグラフを書こうと思いました。 そこで、まず、a1に「x」を書き、a2を「-30」, a3を「-29」と順番にいれていき、a62で「30」というふうに数字を入れていきました。そしてB列のb1に「y=x^2」として、b2以降、yの値を入れていきました。つまりb2が900、b3が841という具合に。 そのあと、a1~a62およびb1~b62を範囲指定して、グラフのツールボックスをクリックして、「折れ線」の一番左の真ん中をクリックしてグラフを作りました。 そしたらyの値は思ったとおり弧を描いたのですが、xの値は軸を縦(yと同じ)に取っているらしく、斜めになってしまいます。 質問なんですが、x軸を横軸にとるにはどうしたらいいのですか? ちなみにオフィスXPについているエクセルです。もちろんOSもXP。

  • VBAでのグラフ作成について質問です。

    VBAでのグラフ作成について質問です。 Sheet1のA2:A10にx軸の値、Sheet1のD2:D10にy軸の値を設定した折れ線付き散布図を作成したいと思い、以下のようなマクロを組みました。 Sub Test() Dim chart1 As Chart Set chart1 = Charts.Add chart1.SetSourceData Worksheets("Sheet1").Range("A2:A10, D2:D10") chart1.ChartType = xlXYScatterLines End Sub 実行してみると、x軸に設定したセルがy軸の値になってしまい、 xの値が空欄の2つの折れ線グラフが現れてしまいます。 A2:A10をx軸の値に、D2:D10をy軸の値にしてグラフを作成するには上記のマクロをどのように変更すればよいのでしょうか?

  • Excel VBAのグラフ化に関する相談

    元の式を多少簡略下したかたちなのですが、 f(x) = ∫(500~x)[(1/(sqrt(y-x))*f(y) - (1/(sqrt(y-x))*df(y)/dy]dy f(y) = 実験的に求めた数値でしか分かっていない関数(B1~B2000にあるとします。) 上記のf(x)をExcelでグラフ化したいと考えています。 Y-xが分母にあるので発散するような気もしますが、引き算になっているので打ち消し合って有限の値を持つと思います。 f(y)は決まった関数ではなく実験的に求めれらた離散的な値であるため、数値積分するしかないのですが 何とかセル上でSumProductなどを使ってグラフ化しようと試みたのですが、 かなりややこしいことになってしまい、どうしてもうまくいきませんでした。 従ってVBAを使ってグラフ化したいと考えているのですが、VBAを今まで使ったことがありません。 従って、どなたか見本を見せて頂けないでしょうか? よろしくお願い致します。

  • Y = (a + x ) / (b + cx)

    Y = (a + x ) / (b + cx )     → (a = -2 b = 1 c = 1/2 ) このグラフを参考にして、 「じゃあ、この式を描いてみよ」 ・・・という問題が出ました。 y = | (b + cx ) / (a + x ) | 【添付写真の、下のグラフが、 この問題の解答です】 絶対値については、理解出来ました。 ですが、「なぜ 分子と分母がひっくり返る(逆数)と、 グラフがx軸について対称になるのか」・・・を理解することができません。 まるごと覚えてしまっても良いのですが・・・。できれば納得したいです。 これは、なぜこのようなことが起こるのでしょうか?

  • a,b,c,d,e,fを定数とするx、yの恒等式

    a,b,c,d,e,fを定数とするとき、次の等式がどのようなx、yについても成り立つ、すなわちx、yについての恒等式であるとする。 ax^2+bxy+cy^2+dx+ey+f=0 等式の左辺をxについて整理すると ax^2+(by+d)x+(cy^2+ey+f)=0 この等式はxについての恒等式であるから a=0,by+=0,cy^2+ey+f=0 これらの等式は、yについても恒等式であるから b=0、d=0、c=0、e=0,f=0 したがって、a=b=c=d=e=f=0が得られる。との解説があったのですが最初の与えられた式をみてもabcdefが0なら恒等式でわざわざこのような解説が不要のような気がするのですがなぜ必要なのでしょうか(中3)

  • ∫(1 - x/a - y/b)dy = -(b/2)(1 - x/a

    ∫(1 - x/a - y/b)dy = -(b/2)(1 - x/a - y/b)^2 + C これは、ある四面体の三重積分の計算の一部ですが、 どうやって計算したら、こうなるのか分かりません。 普通に計算すると ∫(1 - x/a - y/b)dy = y - xy/a - (y^2)/2b + C = y{1 - x/a - y/2b} + C ですよね? ここから-(b/2)(1 - x/a - y/b)^2 + Cまでの道筋を教えてください。

専門家に質問してみよう