2012-05-13 10 views
15

でない場合は、範囲からではなく配列データからグラフを作成できますか(例:二重Y軸線グラフ)ですか?もしそうなら、どうですか?グラフを配列データから作成し、範囲が

+0

[Excel.Rangeではなく、実行時にExcelグラフの動的データを設定する](http://stackoverflow.com/questions/7380266/to-set-dynamic-data-of-excel-chart-at) -runtime-and-not-excel-range) – assylias

+1

@assylias:それは明らかな重複ではありません...言語はVBAではなくC#です。概念はほぼ同じですが、実際の例は全く同じではありません。 –

+0

@assyliasさらに、実際に返信されている他の質問は表示されませんでした。 – brettdj

答えて

13

はい。グラフ上のSeriesオブジェクトのXValuesおよびValuesプロパティに配列を割り当てることができます。例:

Dim c As Chart 
Dim s As Series 
Dim myData As Variant 

Set c = ActiveChart ' Assumes a chart is currently active in Excel... 
Set s = c.SeriesCollection(1) 

myData = Array(9, 6, 7, 1) ' or whatever 
s.Values = myData 
+0

これは、このようにできるデータのサイズの制限です。私はそれが何であるか覚えていないが、それは小さい。 – ja72

+4

@ ja72: "small"を定義しますか?...私は16,000ポイントでそれをテストしました。 –

+0

素晴らしいです。私は訂正した。 – ja72

8

あなたは以降が、私は、各シリーズの長さは255文字の制限があると信じて、以前のバージョンでExcel 2007のシリーズをグラフ化して配列を割り当てることができます。私はこの制限を回避するために使用した方法は、以下のランダムウォークの例に示されている:

Sub ChartArray() 

Dim x(0 To 1000, 0 To 0) As Double 
Dim y(0 To 1000, 0 To 0) As Double 
x(0, 0) = 0 
y(0, 0) = 0 
For i = 1 To 1000 
    x(i, 0) = i 
    y(i, 0) = y(i - 1, 0) + WorksheetFunction.NormSInv(Rnd()) 
Next i 

Charts.Add 
ActiveChart.ChartType = xlXYScatterLinesNoMarkers 
With ActiveChart.SeriesCollection 
    If .Count = 0 Then .NewSeries 
    If Val(Application.Version) >= 12 Then 
     .Item(1).Values = y 
     .Item(1).XValues = x 
    Else 
     .Item(1).Select 
     Names.Add "_", x 
     ExecuteExcel4Macro "series.x(!_)" 
     Names.Add "_", y 
     ExecuteExcel4Macro "series.y(,!_)" 
     Names("_").Delete 
    End If 
End With 
ActiveChart.ChartArea.Select 

End Sub 

別の方法は、(上記の回避策に類似)の配列に名前を割り当て、その後に参照するシリーズを設定することです割り当てられた名前これはxls形式で保存する限り、すべてのバージョンで問題なく動作しますが、新しいxlsx/xlsm/xlsb形式に保存すると、名前付き配列の長さ制限が8192文字に見えます。

+0

好奇心のために、 'ExecuteExcel4Macro'トリックは2007年以降には機能しませんか?それはExcel 2007でそれを試して、グラフにはデータが含まれていません。 –

+0

旧バージョンのExcel 4コマンドは、後のバージョンでは面倒なチャートでは機能しないようです。 –

+0

ありがとう、ありがとう。面白い/ひどいアプローチの+1! –