使用VBA将四维数组传递给Chart SeriesCollection

时间:2015-01-29 13:23:34

标签: arrays excel vba excel-vba multidimensional-array

我想知道如何使用VBA将四维数组的单维传递到XY散点图。

  

[我知道我可以通过费力地为所有内容输入单独的数组来做到这一点,但我希望能让我的代码更紧凑。紧凑性对于填充阵列特别有用,我没有在下面列出,因为我已经完成了。我也知道,如果我使用2D数组,那么我可以使用Application.Index,但我的理解是这不适用于三维数组或四维数组 - 如果我错了,那么请让我知道。我在几个网站上查看了很多查询,我只能使用Application.Index找到有关2D数组的答案 - 如果有错过的页面,请告诉我。]

我有一个已填充的数组变量:

Dim arrData() As Single
arrData(1 To 2, 1 To 4, 1 To 3, 1 To 56)

arrData包含Single - 变量1到56的类型数据,在2x4x3布局中,所以1,344个数据点。

我有一张图表:

Dim bIOpt As Byte
Dim bPOpt As Byte

For bIOpt = 1 To 4
For bPOpt = 1 To 4

Worksheets("Data").Activate
Range(Cells(1, 1), Cells(2, 2)).Select
Charts.Add
With ActiveChart
   .Type = xlXYScatter
   .ChartTitle.Delete
   With .SeriesCollection(1)
      .XValues = ?
      .Values = ?
   End With
   .SeriesCollection.NewSeries
   With .SeriesCollection(2)
      .XValues = ?
      .Values = ?
   End With
   .SeriesCollection.NewSeries
   With .SeriesCollection(3)
      .XValues = ?
      .Values = ?
   End With
End With

Next bPOpt
Next bIOpt

我希望每个SeriesCollection包含来自arrData的56个点:XValues将来自bPOpt arrData(2, bPOpt, n, )版本的Values; (Y)bIOpt将来自arrData(1, bIOpt, n, ) .XValues = ?版本。

我不知道如何编写“.Values = ?”和“{{1}}”行以达到我的目标。

感谢您的帮助。

克里斯

1 个答案:

答案 0 :(得分:0)

您可以使用任何循环算法为XValues和YValues生成1-D数组,然后将这些数组传递给图表系列:

Dim XVals(1 to 56) As Double, YVals(1 to 56) As Double

' loop to populate XVals, YVals from arrData
' blah blah
' end of loop

With .SeriesCollection(1)
    .Values = YVals
    .XValues = XVals
End With

请注意,在VBA中使用单打代替双打,或者用Ints代替长子,没有任何优势。

另请注意,使用工作表单元格中的数据比使用数组时,Excel的图表更可靠。如果遇到问题,可以先将XVals和YVals转储成几列,然后将此数据范围用作图表系列数据。