Clever-Excel-Forum

Normale Version: Automatische Diagrammauswertung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe CEF-User,

ich habe folgendes Problem und hoffe das mir hier vielleicht jemand weiterhelfen kann.

Ich habe eine Excel Tabelle *.csv welche von einer SPS mitgeschrieben wurde. Diese hat mittlerweile über 20.000 Zeilen und wurde seit dem 03.09.2020 von der SPS geschrieben.

Nun will ich zwei spalten in einem Diagramm darstellen. Dies ist natürlich nicht weiter schwierig. Bei den Werten geht es allerdings um Versuche bei denen eine Förderrate in kg/min und ein Zeitstempel aufgezeichnet wurden.
Die einzelnen Versuche sind dadurch zu erkennen das Sie beim Wert der Förderrate immer mit einer Null enden und am Anfang des Versuches immer mit einem Wert (x,xxE-xx oder -x,xxE-xx) beginnen.
Händisch könnte ich nun alle Einzelversuche markieren und anschließend in einem Diagramm darstellen. Bei über 20.000 Zeilen kann dies kein Mensch bezahlen.

Ich bräuchte also ein Makro welches die einzelnen Versuche voneinander Trennt und in einzelnen Diagrammen sinnvoll darstellt.

Ich habe mal einen Auszug aus der Datei angehängt. Es geht hier um die Spalten B und C.

Kann mir ggf jemand mit einem Makro weiterhelfen? 

Ich sollte vielleicht noch erwähnen das mein Studium (und damit die aktivere Excel Nutzung) nun doch schon etwas weiter zurück liegt.

Ich hoffe sehr, dass mir hier jemand helfen kann

LG

Tony
Hallo

mir ist noch nicht klar, wie du die Daten getrennt haben möchtest?

Soll für jeden Versuch ein einzelnes Diagramm erzeugt werden?


LG UweD
Hallo,

mit etwas sortieren ging das zerlegen in die einzelnen Blöcke recht gut, aber einen Chart konnte ich nicht nur durch Anklicken erzeugen.

mfg
Hallo,

danke schonmal für die Antworten.

Die Versuche müssten tatsächlich voneinander getrennt und jeweils einzeln in Diagrammen dargestellt werden.

Am Ende soll eine csv Datei automatisch ausgewertet werden und das Ergebnis sind die einzelnen Diagramme. Das markieren bzw. auswählen der Blöcke soll vermieden werden. Genau dieses kostet, selbst wenn die Blöcke durch Sortierung getrennt sind, enorm viel zeit. Aktuell läuft die Anlage noch im Versuchsmodus. Wenn die Anlage dann erstmal im 24/7 Betrieb ist kommen jeden Tag mehr als 100 Versuche zustande.

Ich stelle mir vor das ein Makro alle Zeilen durchsucht. Steht z.B. in Zeile 1 Spalte C ein Wert welcher dem Format (x,xxE-xx oder -x,xxE-xx) entspricht dann beginnt dort der Versuch. Nun werde alle Zeilen in den Spalten B und C markiert bis zu der Zeile in welcher der Wert in Spalte C = 0 ist. und in einem Diagramm dargestellt. Der Diagrammtitel müsste dann den Zeitstempel (den Wert aus Spalte B) des ersten Versuchswertes bekommen.
Anschließend wird automatisch der Rest der Liste weiterdurchsucht.
Solange bis schließlich das gesamte Dokument durchsucht und in Diagrammen dargestellt wurde.

Entschuldigt das meine ursprüngliche Frage diesbezüglich nicht klar genug war. Ich hoffe Ihr könnt mir dennoch helfen.

LG

Tony
Sorry:

Sofern die Blöcke von VBA erkannt werden können, geht das innerhalb weniger Sekunden. Mein Problem war, dass, wenn ich die Zahlen eines Blocks markiert habe, Excel das nicht in einen Chart umsetzen konnte.

Die Vergabe des Titels nach dem Datum wird auch von VBA erledigt.

Zeige bitte, wie ein Chart aussehen sollte.

BTW: Eine CSV-Datei ist reiner Ascii-Text und muss in Excel importiert werden.

-----------------------------------------

Mit einem kleinen Trick (Überschriften) ging es dann doch.
Nach ein paar Tests liefert eine vollständig automatisierte Auswertung das:

siehe Datei
Hallo

was hältst du hiervon?

Code:
Sub Curven()
    Dim Pfad As String, Datei As String
    Dim DateiNeu As String, TMPDatei As String
    Dim LR As Integer, LC As Integer
    Dim Anzahl As Integer, I As Integer
    Dim Von As Integer, Bis As Integer
    Dim CH As Chart, R As Range
   
    Pfad = "E:\Excel\temp\" 'mit \ am Ende
    Datei = "Curve_Test.csv"
    DateiNeu = "Curve_test_" & Format(Now, "YYYYMMDD__hh_mm") & ".xlsx"
   
    'Temporäre Textdatei erstellen
    TMPDatei = "TMP.TXT"
    FileCopy Pfad & Datei, Pfad & TMPDatei
   
   
    'Text lässt sich einfach öffnen
    Workbooks.OpenText Filename:=Pfad & TMPDatei, Origin:=xlWindows, StartRow:=1, _
        DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
        FieldInfo:=Array(Array(1, 1), Array(2, 4), Array(3, 1), Array(4, 1), Array(5, 1)), _
        TrailingMinusNumbers:=True
       
   
    With ActiveSheet
        .Cells.EntireColumn.AutoFit
        LR = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der Spalte
        LC = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2 'Freie Spalte+2 ermitteln
   
        'per Formel die Nullwerte finden
        .Cells(1, LC) = "1"
        With .Cells(2, LC).Resize(LR - 1, 1)
            .FormulaR1C1 = "=IF(RC[-4]=0,ROW(),"""")"
            .Value = .Value
        End With
       
        'Anzahl Nullen
        Anzahl = WorksheetFunction.CountA(.Columns(LC))
       
        'entsprechende Anzahl Diagramme erzeugen
        For I = 1 To Anzahl - 1
            Von = WorksheetFunction.Small(.Columns(LC), I) + 2
            Bis = WorksheetFunction.Small(.Columns(LC), I + 1) - 1
           
           
  
            ' Chart auf Tabellenblatt legen, Parameter sind Links, Oben, Breite, Höhe
            Set R = .Cells(Von, LC + 1)
            Set CH = .ChartObjects.Add(R.Left, R.Top, 500, 300).Chart
               
            CH.ChartType = xlXYScatterLines
           
            'Daten zuweisen
            CH.SeriesCollection.NewSeries
            CH.SeriesCollection(1).XValues = .Range(.Name & "!$B$" & Von & ":$B$" & Bis)
            CH.SeriesCollection(1).Values = .Range(.Name & "!$c$" & Von & ":$c$" & Bis)
           
            'Überschrift
            CH.HasTitle = True
            CH.ChartTitle.Characters.Text = .Cells(Von, 2)
             
         
        Next
       
        'TMP Spalte löschen
        .Columns(LC).ClearContents
       
    End With
   
    ActiveWorkbook.SaveAs Filename:=Pfad & DateiNeu, FileFormat:=xlOpenXMLWorkbook
    Kill Pfad & TMPDatei
    MsgBox Anzahl - 1 & " Diagramme erzeugt" & vbLf & vbLf & _
                    "und Datei gespeichert."
   
End Sub

LG UweD
@UweD

eine schöne Lösung.