Create Chart from Array data and not range

后端 未结 2 1096
情深已故
情深已故 2020-12-03 03:20

is it possible to create a Chart (e.g. Double Y-Axis Line Chart) not from Ranges, but from Array data? If so, how?

相关标签:
2条回答
  • 2020-12-03 03:48

    Yes. You can assign arrays to the XValues and Values properties of a Series object on a chart. Example:

    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 讨论(0)
  • 2020-12-03 03:52

    You can assign arrays to chart series in Excel 2007 onwards but in previous versions I believe there is a 255 character limit for the length of each series. A method I have used to work around this restriction is shown in the following random walk example:

    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
    

    An alternative method is to assign names to the arrays (similar to above workaround) and then set the series to refer to the assigned names. This works ok in all versions as long as you save in xls format, but there appears to be a length limitation for named arrays of 8192 characters when saving to the new xlsx/xlsm/xlsb formats.

    0 讨论(0)
提交回复
热议问题