Excel 将数组值用作图表中的X和Y值

Excel 将数组值用作图表中的X和Y值,excel,vba,charts,Excel,Vba,Charts,我试图创建一个图表,绘制X点和Y点,但在每个系列的每个X点之间绘制一条线。有点像这样: 然而,我的问题是如何在VBA的SeriesCollection中定义我的Xvalues和Values。这是因为我的值实际上存储在数组中。我使用数组是因为我有以下数据: ID Age1 Age2 Per 1 21 22 54.2% 2 19 23 68.6% 3 18 23 42.0% 4 30 33

我试图创建一个图表,绘制X点和Y点,但在每个系列的每个X点之间绘制一条线。有点像这样:

然而,我的问题是如何在VBA的
SeriesCollection
中定义我的
Xvalues
Values
。这是因为我的值实际上存储在数组中。我使用数组是因为我有以下数据:

ID  Age1    Age2    Per
1   21      22      54.2%
2   19      23      68.6%
3   18      23      42.0%
4   30      33      45.1%
5   17      19      33.0%
6   19      22      41.3%
7   22      27      20.4%
8   19      20      56.4%
9   30      33      42.8%
10  21      22      59.7%
因此,我需要在X轴上绘制
Age1
Age2
中的值。相应的Y值位于每列的
中。但是我需要为每个
ID创建一个新的序列。
我有以下代码,并在问题所在的位置进行了标记。注意,它不编译。我认为问题在于如何通过值来创建XY图表。我只想将这些值传递到图表上

Sub name()
    Dim age1 As Variant
    Dim age2 As Variant
    Dim per1 As Variant
    Dim per2 As Variant
    Dim id As Variant
    Dim ln As Integer
    Dim cht As Chart
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim xdata As Varaint
    Dim ydata As Varaint

    Set wb = ThisWorkbook
    Set ws = wb.Sheets(1)

    id = ws.Range("A2", Range("A2").End(xlDown)).Value
    age1 = ws.Range("B2", Range("B2").End(xlDown)).Value
    age2 = ws.Range("C2", Range("C2").End(xlDown)).Value
    per1 = ws.Range("D2", Range("D2").End(xlDown)).Value
    per2 = ws.Range("D2", Range("D2").End(xlDown)).Value
    ln = UBound(id) - LBound(id) + 1

    Set cht = ws.ChartObjects("chart").Chart
        With cht
            .ChartArea.ClearContents
            .ChartType = xlXYScatter

            For i = 1 To ln
                xdata=Array(age1(i),age2(i)) 'I assumed this would get the values in age1(i) and age2(i) and plot those as the xdata
                ydata=Array(per1(i),per2(i)) 'Same error as above, but would use ydata
                .SeriesCollection.NewSeries
                .SeriesCollection(i).XValues = xdata
                .SeriesCollection(i).Values = ydata
                .SeriesCollection(i).Name = id(i)
            Next i
        End With

End Sub

问题是如何调用数组的各个部分。
age1
数组和其他数组是二维的。因此,您希望
age1(i)
而不是
age1(i,1)
这样
i
是行,
1
是列

Dim xdata As Variant
Dim ydata As Variant

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)

id = Range(Range("A2"), Range("A2").End(xlDown)).Value2
age1 = Range(Range("B2"), Range("B2").End(xlDown)).Value2
age2 = Range(Range("C2"), Range("C2").End(xlDown)).Value2
per1 = Range(Range("D2"), Range("D2").End(xlDown)).Value2
per2 = Range(Range("D2"), Range("D2").End(xlDown)).Value2
ln = UBound(id) - LBound(id) + 1

Set cht = ws.ChartObjects("chart").Chart
    With cht
        .ChartArea.ClearContents
        .ChartType = xlXYScatterLines
        For i = 1 To ln
         xdata = Array(age1(i, 1), age2(i, 1))
         ydata = Array(per1(i, 1), per2(i, 1))
            .SeriesCollection.NewSeries
            .SeriesCollection(i).XValues = xdata
            .SeriesCollection(i).Values = ydata
            .SeriesCollection(i).Name = id(i, 1)
        Next i
    End With

如果您遇到运行时错误,那么它绝对可以编译。如果您遇到编译错误,那就不同了。具体错误是什么?是哪一行导致的?另请注意:您已将
xdata
ydata
声明为范围对象,但从未将它们实例化为范围。实际赋值语句
xdata=…
可能会有进一步的问题,但不能在
Nothing
中输入值,这就是未实例化的范围对象:)我将
xdata
ydata
重新定义为变量。编译错误是语法错误。因为
(age1(i),age2(i))
不是VBA中任何内容的有效符号,所以在带有注释的行上出现语法错误。我想这就是你的意思:
xdata=Array(age1(I),age2(I))
但如果不进行测试,我很确定这是行不通的,因为看起来你试图将
age
数据和
XValues
数据的数组放在一个系列中。每个系列都必须有自己的XValues。使用您的建议编辑的代码仍然表示下标超出范围。但是现在它可以编译了。做得好,是的
range.Value
总是返回一个二维数组。