Excel VBA, имеющий несколько входных столбцов в качестве имени серии диаграммы XYscatter в динамически генерируемой диаграмме

Я пытаюсь автоматизировать создание динамической диаграммы XYscatter с помощью VBA. Мои данные представлены наборами из 12 отдельных данных на испытание, и количество испытаний может варьироваться. Во-первых, отсканировав CSV-файл, чтобы найти последний набор данных, и удалив первую строку тега, я разделил его на 12, чтобы определить количество доступных наборов, а затем заполнил данные на графике соответствующими точками данных и название серии. У меня работает большая часть кода, но у меня возникла проблема с синтаксисом при включении данных диапазона для имени серии. Название серии будет работать, только если я выбираю столбец вместо диапазона данных столбца.

Как я могу изменить свой код, чтобы иметь несколько входных столбцов в качестве имени моей серии?

Sub PlotSelect()
    Dim myChart As Chart

    DataRow = 1
    SelectRow = 2

    With ActiveSheet
    'To count the number of rows to determine number of sets of data
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    Row = LastRow - 1
    N = Row / 12

    'Creating a dummy chart before repopulating the data points
    Range("A1:B2").Select
    Set myChart = ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Chart
    '    delete all the dummy series 
    For i = myChart.SeriesCollection.Count To 1 Step -1
    myChart.SeriesCollection(i).Delete
    Next

    'Populating chart with data    
    Do While DataRow <= N
        If DataRow <> -1 Then
            myChart.SeriesCollection.NewSeries
            myChart.SeriesCollection(DataRow).Name = Range(ActiveSheet.Cells(SelectRow, 2), ActiveSheet.Cells(SelectRow, 5))
            myChart.SeriesCollection(DataRow).Values = Range(ActiveSheet.Cells(SelectRow, 9), ActiveSheet.Cells(SelectRow + 11, 9))
            myChart.SeriesCollection(DataRow).XValues = Range(ActiveSheet.Cells(SelectRow, 8), ActiveSheet.Cells(SelectRow + 11, 8))
        End If
        DataRow = DataRow + 1
        SelectRow = SelectRow + 12
    Loop
End Sub

person CHLee    schedule 04.04.2016    source источник


Ответы (1)


Вместо использования диапазона ячеек для создания имени для ввода данных я объединяю данные в ячейках, копирую содержимое в другую ячейку и выбираю новую ячейку с объединенными ячейками. Позже я удаляю временную ячейку.

Do While DataRow <= 2
    If DataRow <> -1 Then
        myChart.SeriesCollection.NewSeries  'To add new data entries
        **Range("B9999").Select
        ActiveCell.FormulaR1C1 = ((Cells(SelectRow, 4)) & "_" & (Cells(SelectRow, 5)) & "_" & (Cells(SelectRow, 6)))
        myChart.FullSeriesCollection(DataRow).Name = Range("B9999")**
        myChart.SeriesCollection(DataRow).Values = Range(Cells(SelectRow, 2), ActiveSheet.Cells(SelectRow + 600, 2))
        myChart.SeriesCollection(DataRow).XValues = Range(Cells(SelectRow, 1), ActiveSheet.Cells(SelectRow + 600, 1))

    End If
    DataRow = DataRow + 1
    SelectRow = SelectRow + 601
Loop   

Range("B9999").Delete               'to delete temp data
ActiveWindow.ScrollRow = 2          'to reset spreadsheet view

Модификации расположены в диапазоне ** **

person CHLee    schedule 14.12.2016