人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルのグラフをVBAでコントロールする方法
A列に日付け、B列に3桁程度の数字、C列に小数点の割合が入っているシートがあります。
これをX軸をA列。B列を左のY軸で表示。C列を右列のY軸で表示したいのです。
単なるサンプルではなく、オブジェクトモデルを意識した解説をしていただけないでしょうか。もしくは丁寧に解説されているサイトがあればお願いします。
というのも、今後、グラフを増やすことが十分にありそうなので、わかってVBAを書きたいのです。

よろしくお願いします。

●質問者: RON
●カテゴリ:コンピュータ
✍キーワード:VBA エクセル オブジェクト グラフ コントロール
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● hanako393
●5ポイント

http://www.moug.net/tech/exvba/0021.htm

ここを参考にしてください。

グラフをウイザードで作成して、

生成されたVBAのソースをみればわかりますよ。

最初のURLと生成されたVBAソースを照らし合わせて

自分なりに納得するしかないですね。

>オブジェクトモデルを意識した解説

最初のURLで十分オブジェクトモデルを意識してます。

◎質問者からの返答

mougはまっさきに見てるんですが、ちょっとモデルがわからないです。一種の逆引きサンプルみたいなところですからね。コメントに具体的コードを示しました。


2 ● koriki-kozou
●1ポイント

ExcelVBAでグラフを書ければいいということであれば、マクロ記録したものを使えばVisualBasicEditerのインテリセンスでプロパティなども出てくるし、そんなことを求めているのではないという事だとすると、下記が望みの資料だと思う


プログラミングの概念

http://msdn.microsoft.com/ja-jp/library/cc427436.aspx

オブジェクト (Chで始まるオブジェクトがチャート関連)

http://msdn.microsoft.com/ja-jp/library/cc427458.aspx


インデックスページ

Office Web コンポーネント Visual Basic リファレンス

http://msdn.microsoft.com/ja-jp/library/cc427434.aspx

◎質問者からの返答

チャートの面倒な処理はウィザードを使うより、VBAで書いたほうがラクだという意見もあります。

インテリセンスで出てくるプロパティが全部意味がわかっていれば、こういう質問はしません。

たしかに、おっしゃるような正規のマニュアルをぜーんぶ読んで理解すればいいのでしょう。

それならば、他の方がご紹介くださっているmorgのようなサイトは存在価値がないということなのでしょうか。

ちょっと簡単に知りたいという質問はいけませんかね?


3 ● koriki-WeKan
●5ポイント

過去の質問に書いてある。

http://q.hatena.ne.jp/1161656720

◎質問者からの返答

ご指摘ありがとうございます。見ました。

この質問は、ひとつの軸の指定ですよね。

できれば、もうひとつの軸の指定方法を知りたいです。secondary axisとかいうのを指定するようですが、違うかも。。。


4 ● SALINGER
●84ポイント ベストアンサー

VBAのChartに関することは、上手くまとまっているサイトがあまりないですね。

それはExcelのバージョンにより、グラフは機能が追加される部分が多く、

それに合せVBAも追加変更されるので網羅的に解説しているサイトを作りづらいせいだと推測します。

例えば、2007以降のShaps.AddChartが2003で使えなかったり面倒だったりします。


>これがX軸になるのはなぜなのでしょう?

データソースで指定したセル範囲で、左から最右の数値以外のセルまでがX列となり、

それ以外の列がデータ系列となるように自動的処理されるからです。

ここでは日付もシリアル値ではなく数値以外として処理されデータ系列にはなりません。

その為2軸のグラフなどをVBAで作成するときには明示的に軸を指定することになります。


SetSourceDataによるデータ範囲の指定は、上記のような自動的な処理になるので

軸の変更など細かな指定をする場合はNewSeriesでデータ系列を作成して個々に設定することになります。


2軸のグラフを作成するのに参考になるのは、こちら

http://www.k1simplify.com/vba/tipsleaf/graph05.html


各データ系列はSeriesCollectionで指定できますので、

ChartTypeプロパティ グラフの種類

XValuesプロパティ X軸となる範囲。これは一つのデータ系列で指定すればいいです。

Valuesプロパティ データ範囲

AxisGroupプロパティ 第2軸にする場合はxlSecondaryか2を指定。


コメント欄のコードを書き直してみると。

Sub Macro1()
 Dim endRow As Long
 Dim myChart
 Dim Drange As Range
 Dim Trange As Range
 Dim Rrange As Range
 
  'ここではmyChartにChartを指定しています。
 Set myChart = ActiveSheet.ChartObjects.Add(100, 100, 300, 200).Chart
 
 myChart.ChartType = xlLine
 With Worksheets(1)
 endRow = .Cells(Rows.Count, "A").End(xlUp).Row
 Set Drange = Range(.Cells(1, 1), .Cells(endRow, 1))
 Set Trange = Range(.Cells(1, 2), .Cells(endRow, 2))
 Set Rrange = Range(.Cells(1, 3), .Cells(endRow, 3))
 End With
 
 myChart.SeriesCollection.NewSeries
 With myChart.SeriesCollection(1)
 .XValues = Drange
 .Values = Trange
 End With
 
 myChart.SeriesCollection.NewSeries
 With myChart.SeriesCollection(2)
 .Values = Rrange
 .AxisGroup = xlSecondary
 End With
 
  '2軸の最小最大を指定
 myChart.Axes(xlValue, xlSecondary).MinimumScale = 0
 myChart.Axes(xlValue, xlSecondary).MaximumScale = 1

End Sub
◎質問者からの返答

ありがとうございます。まさに求めていた答えです。

コメントで追加質問するかもしれませんが、よろしくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ