• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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/17068)
回答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

  • EXCELマクロで順番にグラフをつくるには?

    エクセルマクロ・VBA初心者です。 現在、グラフ作成で困ってます。 お詳しい方、よければアドバイスを下さい! 作成したいグラフは、元データが5000行×50列で、 1番左列に時刻、2列目からデータとなっており、 1-2列、1-3列、1-4列、・・・・1-50列 という感じの一般的な時系列グラフを多量につくりたいのです。 これをマクロを使って、別シートにグラフ(散布図)を並べて作るというものです。 さらに、別に用意したグラフの名称を並べたセルから、 順に、上記グラフのタイトルとして入力していきたいのです。 これをVBAを使って行いたいのですが、 一体どうすればいいのでしょうか? 「マクロの記録」では、 ■「50列目まで順番にグラフをつくれ!」 ■「名前を順番に入れていけ!」 という命令が私には作れません。 お詳しい方、ご返答宜しくお願い致します。

  • グラフの自動化

    VBA初心者です。 以下の事をVBAマクロで組みたいのですがアドバイス頂けませんでしょうか? <やりたい事> エクセルでA列に月日時分がありB列以降に200行くらいのデータテーブルがあるのですが、 チェックボックス等でグラフ表示したい行を選択して、その行だけを散布図としてグラフ化したいです。

  • Excelで軌跡グラフの作成

    Excel2016を利用しております。 時間経過とともに動いている点をグラフ化したいのですが、 現在シートのフォーマットとしては A列:時間 B列:x座標 C列:y座標 となっております。 B列とC列を選択して散布図グラフを描けば、とりあえず軌跡のグラフができますが、このグラフの中に、どのデータがどの時間のものなのか?が分かるデータを 取り込みたいのです。 データそのものは数千行ありますので、何点か抽出して表示できればと思うのですが、そのようなことは可能でしょうか。 ご教授、お願いいたします。

  • Excelから配列コードの作成

    Excelなどで作成した表の値を初期値とする配列をコードしないといけないのですが、 きれいに作成してくれるソフト・マクロなどはないでしょうか? 配列の要素数は多いので(300くらい)、 1行に何要素か並べ、可読性がよくなるように。 というのが条件です。 よろしくお願いします。

  • EXCELグラフ作成

    Excel2000を使用しています。 X軸に日付け項目 Y軸にデータ数量が入っています。 上記データよりグラフを作成しようとしたところ、 2-Dグラフで入力できる要素の数は、1系列あたり最大32000個です。のメッセージがでます。 グラフ作成するにはどうすればよいのですか? X軸の項目数が43000行分のデータがあります。 OFFICE2007の購入予定はありません。

  • Excelのグラフ(2000)

    お世話になります 教えてください。 EXCEL2000です。 グラフを作成しています。 行のデータ数は39634行あります。 B列に時間、C列に数値があって、それをグラフにしたいのです。 x軸に時間、Y軸に数値にします。 でも、作成しても、エラーが出るのです。 「2-Dグラフで入力できるデータ要素の数は1系列あたり最大32000個です。32000個以上のデータ要素を使用する場合は、複数の系列を作成してください。」 というようなエラーです。 まあ、たしかにデータ数は32000個以上ありますが。。。 これはいったいどういうことでしょうか? じゃあ、2系列作成すればいいのかと、グラフウィザードの、(散布図)系列タブで、「系列」のところに「系列1」しかないのをその下の「追加」ボタンを押して「系列2」を追加しました。 エラーによると、「系列1」だけでは作成されないグラフ分を系列2でおぎなっているのだろうかと思いましたが、出来上がったグラフを見ると、すっかり系列1と系列2が重なっているのです。すっかりわからなくなりました。 デフォルト設定が系列1が青色、2がピンクだったので、 どちらも同じ色にしたいと思いましたが、系列2のほうが上にかさなっていて、おかげで系列1が選択できず、「データ系列の書式設定」をしようにもできません。 すっかりかさなっているグラフをそれぞれの系列を選択するにはどうしたらよいでしょうか? グラフをきちんと作成するにはどうしたらよいでしょうか?2系列?うまくつくるにはどうしたらよいでしょうか?

  • エクセルマクロでのグラフ作成について

    エクセルのマクロでグラフを作成したいのですが 設定したい値のセルが行も列も飛び飛びなんです。このような場合、どうやってセルを設定すればいいか教えてください。 セルの自動マクロ記録でやってみると、例えばですが ActiveChart.SetSourceData Source:=Sheets("グラフ").Range( _ "A5,A10,A15,A20,A25,A30,A35,D5,D10,D15,D20,D25,D30,D35"), PlotBy:= xlColumns このような設定で希望通りのグラフが出来上がります。 A列(X軸)とD列(Y軸)の値で、列は固定で数行置きのデータでのグラフが作りたいのです。 しかもどの行かは固定ではありませんので、セルアドレスをそのまま入力するのではなく、Cells(,) で設定したいのですが、Unionを使ってみたり、色々試したのですが、うまくできません。 おわかりの方教えて頂けませんでしょうか。 よろしくお願いいたします。

  • Excel グラフのプロットからデータを見つける

    こんにちは、おそらくとても基本的な作業なのですが、分からずに困っております。エクセルで、あるデータから散布図を作ったとします。するとプロットがグラフとして現れますが、このプロットがどのセルのデータに該当するかを見つけるにはどうしたらよいでしょうか。プロットをクリックしても、その座標の値しか現れず、どのセルに対応するのかをみつけることができません。ご存知の方宜しくお願いします。 Excel 2007を使用しております。

  • VBAによるリアルタイムグラフ作成

    あらかじめ作成されている散布図のグラフにデータを追加しプロットしていきたいと思い、決められたセルに入力されたデータをVBAでグラフにプロットするところまでは何とか作れました。 追加するデータをセルに入力すると自動的に散布図にプロットする方法についてご教示頂けないでしょうか。 ◯データを入力するセル '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 ・ ・ ・ A列は、系列名でデータラベルとして使用 B列は、横軸 C列は、縦軸 ◯あらかじめ作っている散布図には、閾値を事前に7つのデータ系列をつかってプロットしていますので、追加されたデータのインデックスは8からになります。 ◯追加するデータ数は未知数 ◯可能でしたら、セルに入力されたデータを消すとき、グラフのデータ系列も一緒に消える よろしくお願いします。 Sub グラフ描画() '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 Dim chartObj As ChartObject Set chartObj = ActiveSheet.ChartObjects(1) With chartObj.Chart ' データセット .SeriesCollection.NewSeries .FullSeriesCollection(8).Name = "=Sheet1!$A$3" .FullSeriesCollection(8).XValues = "=Sheet1!$B$3" .FullSeriesCollection(8).Values = "=Sheet1!$C$3" ' マーク設定 .FullSeriesCollection(8).Format.Fill.Visible = msoTrue .FullSeriesCollection(8).MarkerStyle = xlMarkerStyleCircle .FullSeriesCollection(8).MarkerSize = 6 .FullSeriesCollection(8).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) .FullSeriesCollection(8).Format.Line.Visible = msoTrue .FullSeriesCollection(8).Format.Line.ForeColor.RGB = RGB(255, 0, 0) ' データラベル設定 .FullSeriesCollection(8).ApplyDataLabels .FullSeriesCollection(8).DataLabels.ShowSeriesName = True .FullSeriesCollection(8).DataLabels.ShowValue = False .FullSeriesCollection(8).HasLeaderLines = False .FullSeriesCollection(8).DataLabels.Position = xlLabelPositionAbove End With End Sub

  • Excelマクロ:折れ線グラフの行範囲を可変

    Excel2010を使用しています。 マクロを記録して折れ線グラフを作ろうとしていますが、マクロを記録出来ないところがあるらしくマクロを実行できません。 マクロを使用するのが初めてで、VBAは勉強中の為、自力での組み立てが出来そうにありません。 どうかお力を貸して頂けないでしょうか。 sheetによって行の数に違いが有る為、行のみを可変範囲設定出来ればと思っています。 1行目に系列が表示しており、2行目からはすべて数字となっています。 A列を横軸の目盛りで表示し、C・D・E列を折れ線グラフで表示し、B・F列はグラフには使用しません。 よろしくお願いします。

専門家に質問してみよう