web-dev-qa-db-ja.com

範囲ではなく配列データからグラフを作成する

範囲からではなく、配列データからチャート(二重Y軸折れ線グラフなど)を作成できますか?もしそうなら、どのように?

18
sifar

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

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

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

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文字の名前付き配列の長さに制限があるようです。

9
lori_m