2016-04-04 4 views
0

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

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

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 

ответ

0

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

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 

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

Смежные вопросы