Использование значений массивов в качестве значений X и Y на графике - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь создать диаграмму, которая отображает точки X и Y, но рисует линию между каждой точкой X для каждой серии.Вроде как это:

enter image description here

Однако моя проблема заключается в том, как я определяю свои Xvalues и Values в SeriesCollection VBA.Это потому, что мои значения на самом деле хранятся в массивах.Я использовал массивы, потому что у меня есть данные:

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 находится в столбце Per.Но мне нужно создать новую серию для каждого 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

1 Ответ

0 голосов
/ 24 августа 2018

Вопрос в том, как вы называете части массива.Массив 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
...