ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのグラフ作成に関して教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
VBAを始めて2か月ほどの初心者です、よろしくお願いします。

現在大学の研究で、FORTRANで作られたプログラムをVBAへ移植するということを行っています。
移植元のプログラムの内容は「10数個のX,Yの値とその誤差から、York法という最小二乗法を用いて回帰直線の傾きと切片を求め、そこから岩石の年代を求める」というものです。移植するにあたり新たにグラフ化のプログラムも追加したいのです。


グラフには、「1つめの系列に、入力したX(I)とY(I)」、「2つめの系列に、計算で求めた傾き・切片・X(I)の値から求めたY2(I)の直線」を描きます。(写真を参照)
このときセルから値を取得するのではなく、プログラム中の計算で得られた配列から直接データを取得してグラフを描きたいのですが、配列からデータを取得する方法がわかりません。

どなたかヒントだけでもいいので、教えてください。
よろしくお願いします。

コメント(8)

うっしーさん、こんにちは。

>配列からデータを取得する方法がわかりません。

質問の意味が良く分かりません?
a(x)という配列に値が入っていれば
b=a(x)で配列から値が取得できますが?
>臥龍(がりょう)さん
コメントありがとうございます。
僕の書き方がわかりずらかったですね、すいません。

グラフ化のプログラムを作るときに、参考にセルの値からグラフを作ることをマクロ記録で行ってみたのですが、コードが、
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B5:G15"), PlotBy _
:=xlColumns
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(2).Delete
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R6C5:R15C5"
ActiveChart.SeriesCollection(1).Values = "=Sheet1!R6C6:R15C6"
ActiveChart.SeriesCollection(2).XValues = "=Sheet1!R6C5:R15C5"
ActiveChart.SeriesCollection(2).Values = "=Sheet1!R6C7:R15C7"
ActiveChart.Location Where:=xlLocationAsNewSheet

With ActiveChart

略。
というように書かれていました。

このときグラフの系列の値は
ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R6C5:R15C5"
という形で取得されているんですよね?

そこで僕のやりたいことというのは、このグラフの系列の値をプログラム中のX(I)、Y(I)、Y2(I)という配列から直接取得するということなんです。一応参考書を読んで、
ActiveChart.SeriesCollection(1).XValues = "Array(X())"
ActiveChart.SeriesCollection(1).Values = "Array(Y())"

略。
というように記述すればできるのかな?と思ってやってみたのですが、エラーが出てしまいました。
このとき、どのように配列からグラフの系列の値を取得するコードを書けばいいのかが知りたいのです。


…言いたいことがわかりずらくて申し訳ありません、まだ基礎もしっかりわかっていないもので。
未熟者の質問ですが、よろしくお願いします。
ActiveChart.SeriesCollection(1).Values = "={1,2,3,4,5,6,7,8,9}"

等のように数字に展開してみてください。
一番の疑問は配列をセルに展開しては駄目な理由があるのですか?もしそれがあるとすれば配列を文字列に変換するためにループでひとつずつ&で接続して文字列に展開する必要があるかと思います。それよりもセルに入れていく方がうんとコードは簡単ですから。
自分もデバッグ&将来の追加コーディングを考慮すると、
セルに値を入れた方が良いような気がします。

非表示シートも作れるわけですし・・・。
X軸方向が固定なら一度グラフを書いておいて、グラフの元になったセルをcell関数で値を書き換えて行きますね。

X軸方向が可変なら、一度セルにデータを書き込んだ後、
以下の「Range("B5:G15")」の「("B5:G15")」」をデータ数にあわせて書き換えます。
※他の場所でも変更が必要な所は同様に書き換えます。


ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B5:G15"), PlotBy _
:=xlColumns
ofさま、よこまやさま、“ぼ”さま、臥龍(がりょう)さま、コメントありがとうございます。

配列から値を取得する方法では面倒になるようですね。実際にはセルにプログラムの計算で出た値を多く出力するので、出力する必要がないものはセルに出力したくないなと思っていたのです。
ですがセルに値を入れた方がわかりやすいようなので、セルに値を入力してグラフの値を取得したあとにセルを非表示にする方法でやってみようと思います。

皆さん親切な解答を本当にありがとうございました。頑張ってみます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。