• ベストアンサー

VBAで散布図(グラフ)の作成

VBAでセルの値を読み込み散布図である折れ線グラフを作成しました。しかし、x軸に指定したい列も折れ線(xlScatterLines)で表示されてしまい思い通りになりません。どのようなキーワードでx軸を指定できるのでしょうか?ちなみに、そのグラフの[元のデータ]を参照するとやはりx軸の項目が空欄になっています。

  • e-l
  • お礼率45% (158/349)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

私なりにまとめてみました。参考になりますでしょうか。 反例などありましたら、指摘してください。 ここでは項目データが、列ごとに記録されているシートを考えます。 A列に体重、B列に身長、C列に年令などの例です。 (1)エクセルの散布図は2次元の図です。縦横の座標データが必要です。 また3つ以上あっても、2次元散布図では書けません。 シートに沢山(3列以上)の系列がある場合は、3系列以上指定するまたは指定しないと、それぞれが折れ線グラフで線なしの点グラフになってしまいます。 (2)2列の同行データでy軸、x軸で測って、交差する位置に点が描かれます。 (3)文字列の列があっても、2列しか数値データがない場合は、最初に出てくる数値列と次に出てくる数値列の2つが取り上げられます。 指定しないと、上例では体重と身長の散布図となります。 A列に近いほうから、最初にあるデータ列がX軸になり、次にあるデータ列がY軸になります。グラフウイザードの2/4でデータ範囲を、逆転させて 指定しても、逆になりません。列を入れかえるより他ないようです。 しかし隣り合わない、2つの列を指定したい(例えば体重と年令)場合は、体重列と年令列を(CTRLキーを押して)範囲指定して、グラフを描かせれば良い。 (4)そのほかに、Y軸の目盛の範囲を決めたいときは、一旦グラフを作成しY軸をクリックして、右クリックして、「軸の書式設定」を選び、「目盛」タブを選び、Y/数値軸目盛の最小値・最大値を指定します。身長であれば最小140、最大190とか指定します。X軸との交差点も指定します。 (5)あとX軸の目盛の範囲を決めたいときは、一旦グラフを作成しX軸をクリックして、右クリックして、「軸の書式設定」を選び、「目盛」タブを 選び、X/数値軸目盛の最小値・最大値を指定します。体重であれば最小50、最大90とか指定します。 (6)以上で目盛り線、凡例、タイトル、マーカー、データラベルなどを除いた、数値的な仕様が決まります。 -------- さて本題の、VBAでは (A)散布図は Charts.Add ActiveChart.ChartType = xlXYScatter (B)系列はActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A1:D7"), PlotBy:= _ xlColumns この例ではA、C列は文字列の例でした。 列方向にデータ系列を考えるときはPlotBy:=xlColumnsです。 (C)グラフにするデータの列(と範囲)の指定は C,D列に数値データがあるときの例では ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("C1:D7") 離れた範囲の場合は ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("C1:C7,E1:E7"), (D)X軸の最高値と最低値、Y軸の最高値と最低値、交差する点を 定義するのは下記で行う。 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 50 .MaximumScale = 100 .CrossesAt = 50 End With ActiveChart.Axes(xlValue).Select With ActiveChart.Axes(xlValue) .MinimumScale = 20 .MaximumScale = 100 .CrossesAt = 20 End With

e-l
質問者

お礼

大変助かりました。有難う御座います。

その他の回答 (3)

  • sanakazu
  • ベストアンサー率18% (43/230)
回答No.3

#1です、度々失礼します。 No.1での回答ではXValuesがX軸、ValuesがY軸を指定します、説明が抜けておりました。

  • sanakazu
  • ベストアンサー率18% (43/230)
回答No.2

#1です。補足です。 xv = "='Sheet1'!R1C1:R10C1" これで"xv"にはシート名「Sheet1」のA1~A10セル範囲を指定したことになります。

  • sanakazu
  • ベストアンサー率18% (43/230)
回答No.1

事前に"xv""yv"には指定した行列の範囲をいれておきます。("i"はグラフ内の変更したい系列番号) ActiveChart.SeriesCollection(i).XValues = xv ActiveChart.SeriesCollection(i).Values = yv これでできました。 Formulaで一括変更も可能ですが、その後系列番号が変わってしまいますので、こちらは割愛します。 漠然としていますか?詳細が必要なら後ほどレスいたしますが・・・?

e-l
質問者

お礼

ありがとうございます。補足含め大変助かります。あとで試させていただきます。

関連するQ&A

  • 散布図について教えてください

    散布図を使って縦の折れ線グラフを作っていましたが、IF関数を使った数式の値を反映させていましたが、時には値が{#VALUE!}になることがあります。 その#VALUE!を空欄とみなしてグラフを作ることはできますか?教えてください。

  • 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))

  • 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軸の値にしてグラフを作成するには上記のマクロをどのように変更すればよいのでしょうか?

  • エクセルの散布図のX軸に文字を表示したいのですが、どうしたらよいのでしょうか?

    エクセルの散布図を使って、下の表をグラフにしたいと思ってます。 a  a1 b  a2 c  a3 この場合、そのまま折れ線グラフにすると、X軸にしっかり、a,b,cと出てくるのですが、散布図の場合は、X軸が1,2,3となってしまって、セル内の文字が表示されません。 X軸の目盛りに、セル内の文字を表示させるにはどうしたらよいのでしょうか?お願いいたします。

  • エクセルで二軸上の散布図

    二軸上のグラフでは折れ線グラフは描けるようなのですが、 同様に散布図は描けないのでしょうか?

  • エクセル2000 散布図

    エクセル2000で散布図を作成中です。 基本的な質問で申し訳ないのですが、2項評価点をX軸/Y軸に割り振り 散布図上の交差点を評価ランクとして出したいと思っています。 普通に2項の数値データ(X軸Y軸とも数値範囲:0.0~5.0)を範囲指定して グラフウィザードから散布図を作成すると、X軸はデータセルの順番に左から 順番に並べられるだけで、データ値を参照しません。グラフにはY軸データのみ 表示されています。 データ数は全てで63個(X/Y軸ともに)なのですが、不思議なことに52個まで のデータを範囲指定すると、X軸もデータ値が表示され上手く散布図が書けます。 元データで「系列」範囲を探ってみても、きちんとそれぞれのデータ値が入って います。データ表の書式はX/Y軸とも「数値」です。 なぜでしょうか?教えてください。 資料作成が行き詰まり、大変困っています。

  • Excel散布図 X軸の値を変えたい

    ≪エクセル初心者です。Excel2000,WindowsXP になります。よろしくお願いいたします≫ エクセルで散布図を作りたいのですが、 X軸の値が元データの値にならず四苦八苦しております。 X軸は、8byteに始まり、64KBまでありますが グラフ>元のデータ>Xの値が8byte~64KB まで選択されているのに、この値が反映しません。 (X軸の値がゼロに始まり16で終わる図になってしまいます。) 「軸の書式設定」 で、 最小値・・・「8」 最大値・・・「64」 としたら、 X軸が16の値までしか 散布図のデータが反映しません。 グラフの元のデータとなる表は以下のとおりです。 セルA1   8byte, 16byte 32byte...........64KB 5Mbps   0.612   4.879   8.233    4.879 10Mbps   0.611  4.879     8.900     60.309  30Mbps  0.629  4.879    19.000     99.879 ★補足(1)  X軸8byte, 0.612  最小値   X軸64KB  99.879 最大値  といった結果になる散布図グラフを作成したい。  8byteの頃は、近い値ばかりなので散布図の「点」重なっており、  バイト数が上がる毎に、散布図の点がまだらになっていくようなグラフを目指しています。 ★補足(2)  Y軸は対数表示になります。 ★補足(3)  元のデータのセルA1はブランクですが  その他は全てデータが埋まっております。 以上の説明でお分かりいただけるか不安です。。。 もし不明な点がありましたらすぐ回答いたします。 お手数をおかけしますが ご回答の程よろしくお願いいたします。

  • 散布図のラベル位置について

    EXCEL2000を使っています。 散布図のグラフを作りました。ラベルを表示させていますが、微妙な位置の調整はできるのでしょうか? 聞くところによるとLotus123ではラベルのX,Yの値を指定できるようなのですが・・・。 VBAでも構わないので、教えてください!

  • エクセルの散布図で

    クロスセクションデータで、商品A:Dまでの販売量を男、女で分けた散布図を作ろうとすると商品Aの男の値と女の値が二つ表示されます。 これを一つにしたいのですが…Y軸で男の値、X軸で女の値が分かるように。 素人で困っています。 積み上げ棒グラフなら可能ですが、散布図で表示したいのです。 お願いします。

  • ExcelでIF関数を用いたときの散布図のエラー

    win7 64bit+Excel 2010を使用しています. Excelにて、IF関数を用いて次のように何行か入力するとします. =IF(A1="","",A1+B1) =IF(A2="","",A2+B2) これをC列に出力し,D列に任意のデータを入力します. そして,C列をx軸に,D列をy軸にして散布図をとったときに,C列の選択したセルの最後の行が空欄になっていると,A列をx軸にとった散布図になってしまいます. 入力するデータ数は定まっていないため,余裕をとって散布図表示ができるようにしたいのですが, 解決できる方法がありましたら,是非,お教え願います.

専門家に質問してみよう