電子書籍の厳選無料作品が豊富!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/26 14:18

#1です、度々失礼します。



No.1での回答ではXValuesがX軸、ValuesがY軸を指定します、説明が抜けておりました。
    • good
    • 0

#1です。

補足です。

xv = "='Sheet1'!R1C1:R10C1"

これで"xv"にはシート名「Sheet1」のA1~A10セル範囲を指定したことになります。
    • good
    • 0

事前に"xv""yv"には指定した行列の範囲をいれておきます。

("i"はグラフ内の変更したい系列番号)

ActiveChart.SeriesCollection(i).XValues = xv
ActiveChart.SeriesCollection(i).Values = yv

これでできました。
Formulaで一括変更も可能ですが、その後系列番号が変わってしまいますので、こちらは割愛します。

漠然としていますか?詳細が必要なら後ほどレスいたしますが・・・?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/24 11:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!