我想知道如何使用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}}”行以达到我的目标。
感谢您的帮助。
克里斯
答案 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转储成几列,然后将此数据范围用作图表系列数据。