10.03.2021, 15:53 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2021, 15:55 von tony k..)
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.
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.
10.03.2021, 17:12 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2021, 17:27 von Fennek.)
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.
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"
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
'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