从数组数据创建图表而不是范围

sif*_*far 19 arrays excel charts vba range

是否可以创建一个图表(例如双Y轴线图)而不是Ranges,而是来自Array数据?如果是这样,怎么样?

Jea*_*ett 16

是.您可以将数组分配给图表上对象的属性XValuesValues属性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
Run Code Online (Sandbox Code Playgroud)

  • @ ja72:定义"小"?...我刚刚测试了16,000分. (4认同)
  • @ja72 可能指的是 Excel 2003 及之前的版本,其中存在长度限制。在 Excel 2003/2007 中,网格大小还将一维数组的大小分别限制为 256 或 16384 点。为了克服这个问题,您可以使用“application.transpose(mydata)”将数据定义为垂直数组(或像其他响应中那样声明一个 nx1 数组) (2认同)

lor*_*i_m 9

您可以在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
Run Code Online (Sandbox Code Playgroud)

另一种方法是为数组指定名称(类似于上面的解决方法),然后设置系列以引用指定的名称.只要以xls格式保存,所有版本都可以正常工作,但是在保存为新的xlsx/xlsm/xlsb格式时,对于8192个字符的命名数组似乎存在长度限制.