2016-04-04 9 views
0

Ich versuche, die Erstellung eines dynamischen XY-Scatter-Diagramms mit VBA zu automatisieren. Meine Daten sind in Gruppen von 12 individuellen Daten pro Versuch und die Anzahl der Versuche variiert. Zuerst scannte ich die CSV-Datei, um den letzten Satz von Daten zu finden, und indem ich die erste Zeile des Tags entfernte, teilte ich sie durch 12, um die Anzahl der verfügbaren Sätze zu bestimmen und dann die Daten mit den entsprechenden Datenpunkten und grafisch darzustellen Serienname. Ich habe den größten Teil des Codes funktioniert, aber ich habe ein Problem mit der Syntax bei der Aufnahme von Daten für den Seriennamen. Der Serienname wird nur funktionieren, wenn ich eine Spalte anstelle eines Bereichs von Spaltendaten auswähle.Excel-VBA mit mehreren Spalteneingaben als XY-Scatter-Diagramm Serienname im dynamisch generierten Diagramm

Wie kann ich meinen Code so ändern, dass mehrere Spalten als mein Serienname eingegeben werden?

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 

Antwort

0

Anstatt eine Reihe von Zellen mit dem Namen für die Dateneingabe zu erzeugen, fusionieren ich die Daten in den Zellen und kopiert den Inhalt in eine andere Zelle und wählen Sie die neue Zelle mit den verketteten Zellen. Später lösche ich die temporäre Zelle.

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 

Die Modifikationen sind in der ** ** Bereich

befindet
Verwandte Themen