• 締切済み

Excelマクロ:配列データからグラフを作成するには?

マクロ初心者です。 Excel VBAのマクロで、2つの配列データから、散布図グラフを作成したいのですが、セルに配列データを書き込まず、直接グラフ化するにはどうしたらよいでしょうか? 配列データの要素数がexcelの行と列の最大数(65536,256)?を超えてしまっているので、配列データから直接グラフ化したいと思っています。 よろしくお願いいたします。

みんなの回答

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

#1で解答入れたものです。外出予定あって取り急ぎいれたのですが、良く考えると、「配列」と言う意味が良く判らない。 (1)グラフは通常2次元グラフを考えていると思う。 散布図に適したデータなら、X軸、Y軸の1組のデータで1点 を表すとして、この「点」座標データ組が数百万あるということですか。それであればエクセルに拘らず、多数のデータを扱える専用グラフソフトを探されては。 (2)プログラムで言う配列は、そのプログラムの中に入って 初めて使えるものだから、そのまま外部記録メディアに記録できるものでは無い。エクセルに配列がありますとは何を言うのか不明。(TRNSPOSE関数、MMULT関数、MINVERSE関数を使う場合には、数値を「配列」として扱う必要があるという関数と利用者の約束ごとはあるが、グラフがデータを配列として要求するかどうかはグラフソフトの問題。) --- (1)としてVBで下記はいかがですか。安上がりです。 Private Sub Form_Click() a = 0.1: b = 0.1 Open "c:\my Documents\sct1.csv" For Input As #1 p01: If EOF(1) Then GoTo end1 Input #1, X1, Y1 Form1.PSet (X1 * a, Y1 * b), vbRed GoTo p01 end1: Close #1 End Sub PSetは1点は微小ですが、何百万組データがあるのならこのほうが良かろう。エクセルなんぞだと、ポイントだけで画面が 埋まってしまうのではと心配しました。 微小点が何度も集まると、濃いように見えるのではないでしょうか。雲のように。 a,bは画面に点が収まるように縮小・拡大するものです。 Form1はPicture1コントロールでも良かろう。 表・軸見だし・凡例はテキストボックスを貼り付けてどうですか。 X,Y軸は直線を貼り付けてはどうですか。 上記sct1.csvは例として 1230,2340 2323,1120 3456,4535 4256,1345 5234,3451 2453,4561 のようなものです。

zawanao
質問者

お礼

早速の回答ありがとうございました。 2つの配列というのは、X軸データで1つ・Y軸データで1つの配列を考えていました。 何をやりたかったかというと、画像の色分布を2次元の散布図で表示させようとしていました。 Excel VBAで、RGBの各画素のデータから、色のXY座標に変換した結果をそれぞれの配列に入れておき、その分布をグラフ表示させようと考えていました。 (分布が集中している色は濃く表示されるだろう位の軽い気持ちで・・・) No.1で回答していただいたように、いったんX軸、Y軸に相当するデータを セルに書き込んでそれをグラフ化してみたのですが、やってみて、無謀なことをしていたなぁと気がつきました。 imogasiさんご指摘のように、分布の集中を濃さで表現するにはExcelのグラフでは無理があることを実感しました。 無理やりやろうとしたら、色座標でヒストグラムを作成し、3次元的なグラフにしないといけないですね。 imogasiさんから頂いた、貴重なアドバイスを元に、もう少し構成を考えてみようと思います。 ほんとうにありがとうございました。

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

私は下記のことを思いつきます。 (1)エクセルのアドインソフトを購入入手する。   WEB検索で、グラフ アドイン または グラフ Addinで検索して、市販、フリー、シェアウエアを探して 見てください。多量データ数に対応したソフトがあるかも 知れない。 (2)エクセル等のソフト部品を利用する。    VBAなども含む。 (3)エクセルの手操作 (4)その他-データを合理的・理論的に間引く (3)について これが一番いいのですが。系列というのがあります。 散布図の場合重ねグラフのようになりそう。 A列1-65000行を第1系列にする。 B列1-65000行を第2系列にする。 第1系列=(行数-A列データ)、第2系列=(行数-B列データ)にすると、第2のプロットの色は変わりますが、重ねたように見えるようにグラフを書きます。(小数例でしかやってません。一度試してみてください。)操作は 右クリック―元のデータ-系列-XとYの値-追加。 ただこれも256行に余裕が内状態ではダメかも知れない。 (2)のVBAは ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:B5"), の=右側がRange指定になっていて、データベースを指定出来る様になっていないと思う。(今後出来るという答えが出るかもしれないが)。またデータ以外だけを、部品として利用するのは 初心者には難しい(APIとかクラスとか)。

関連するQ&A

専門家に質問してみよう