Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1604to1608
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nach einer bestimmten anzahl an ! wert Auslesen

Nach einer bestimmten anzahl an ! wert Auslesen
31.01.2018 11:32:33
Andreas
Hallo Liebe Forum Gemeinde,
mal wieder habe ich das Problem, das ich nicht weiter komme und die Suche im Netz nicht das richtige Ergebnis liefert.
Ich habe eine recht große Liste, die als .xlsb immer noch 142.845 Kb groß ist.
Insgesamt habe ich 860.000 Zeilen können auch mal mehr und mal weniger sein.
die Excel Datei kann ich so nicht verarbeiten, da sich Excel bei z.B. der Aktion "Text in Spalten" immer aufhängt, da die Datenmenge zu groß ist.
Die Datei wird von einer Maschine erstellt und ich muss die auswerten. Dafür benötige ich zwei bestimmte Werte.
Der Nachteil, alle Werte werden in eine Zelle geschrieben. Den ersten bekommt man noch gut raus. der Zweite ist da schon schwieriger.
Der Wert steht auch nicht immer an der gleichen Stelle nur ist jeder wert mit einem !1 getrennt manchmal steht auch !2. Der zweite Wert den ich benötige steht nach dem 10. mal !.
Jetzt müsste man die ! zählen und dann nach dem 10. ! die 1 oder2 überspringen und den Wert ausgeben.
Ich habe leider keine Ideen mehr wir ich das mit dem Zählen einbauen soll :-(
Habt Ihr da eine Idee?
Der Wert einer Zelle sieht so aus.
06:45:13!1,-0.07034995!1,0.009581033!1,-0.06251561!1,0.007677482!1,-0.14973181!1,26.43976!1,1.0007057!1,1.0!1,0.010480285!1,-0.007326007!1,0!1,0.49558538!1,0.49797794!1,-1.75!1,,,0.0!2,0.0!2,0.0047618328!1,0.0!1,0.031613827!1,0.0!1,-0.117326386!1,-0.15300143!1,,,,,,,,,,,,,,,,,,,0.0!1,0.0!1,,,,,,,,,,,,,,0!1,0!1,,,,,,,,,,,0!1,0!1,0!1,0!1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..54 07!1,10!1,6!1,17!1,6!1,45!1,24!1,11!1,GAF459!1,87!1,SFI5CS0086S0385!1,SFI5DS0087S0385!1,xxxxxxxxxxxxxxx!1,0!1,0!1,0!1,0!1,0!1
Grüße
Andreas

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach einer bestimmten anzahl an ! wert Auslesen
31.01.2018 11:36:50
Andreas
06:45:14!1,-0.11415685!1,-0.0029279273!1,-0.07689741!1,-0.003593957!1,-0.20518269!1,-0.46439642!1,1.0024732!1,1.0045786!1,0.012515187!1,-0.008852243!1,0!1,0.49621752!1,0.497421!1,-1.75!1,,,,,,,,,,,,,,,,,,,0.12933433!1,-0.60754114!1,20.0!1,0.16769426!1,0.27272788!1,20.0!1,1!1,0.0!2,,,,,,,,,,,,,,,79.0!1,79.0!1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0!1,0!1,0!1,0.0!1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Das ist der richtige Inhalt der Zelle.
In meiner Fregastellung wurde der Wert irgend wir verändert.
AW: schwer verständlich
31.01.2018 11:42:22
Fennek
Hallo,
wenn die gezeigten Text in Spalte A stehen, kann man in VBA mit

i=1
Tx = split(cells(i,1), "!")
den Text aufspalten (Tx ist ein 1-dim Array)
mfg
Anzeige
AW: schwer verständlich
31.01.2018 13:00:30
Andreas
Hallo,
das ist richtig, ist etwas kompliziert.
Aber bei Split muss sich passen, habe ich noch nicht gemacht.
Ist Split die Funktion Text in Spalten?
Grüße
Andreas
AW: schwer verständlich
31.01.2018 13:44:32
Andreas
Klasse, das kannte ich noch nicht. Hilft mir aber super weiter um die Datei nach meinen Wünschen auszulesen.
Danke Dir vielmals dafür.
RegEx-Variante...
31.01.2018 14:06:33
Michael
Hallo Andreas,
...auch mit regulären Ausdrücken sollte eine relativ performante Lösung erzielbar sein, hier als Basis-Bsp: https://www.herber.de/bbs/user/119439.xlsm
LG
Michael
AW: RegEx-Variante...
31.01.2018 14:55:39
Andreas
Hallo Michael,
die lösung ist klasse,vielen Dank dafür.
Dann muss ich das noch so umbauen, das er meine Liste Zeile für Zeile duchgeht und mir den Wert aus jeder Zeile ausließt und in einer anderen Tabelle untereinander schreibt.
Ich denke da ein eine Loop funktion oder hast du dafür eventuell eine elegantere lösung.
grüße
Andreas
Anzeige
AW: RegEx-Variante...
31.01.2018 15:23:35
Michael
Hallo!
Insgesamt habe ich 860.000 Zeilen
Das könnte mühsam werden, Zeile für Zeile ;-).
Besser über ein Array, hier als Bsp.: https://www.herber.de/bbs/user/119442.xlsm
LG
Michael
AW: RegEx-Variante...
01.02.2018 08:27:26
Andreas
Hallo Michael,
das ist richtig, dasdauert ewig.
Deine Lösung ist natürlich sehr elegant. hab ich auch auf meine Datei umgewandelt, bekomme aber die Meldung (Nicht genugens Speicher.)
Kann man die Werte, die nach dem durchlaufen des Makros in B verbleiben auch gleich in eine neue Excel Mappe schreiben so das dann die WErte aus A und B darin stehen?
Dann braucht das Makro die anderen Werte nicht löschen was bei der Anzalh an Zeilen anscheinend zu viel Speicher benötigt.
Viele Grüße
Andreas
Anzeige
AW: RegEx-Variante...
01.02.2018 11:07:45
Michael
Hallo!
Nicht genugens Speicher
Das ist natürlich nicht gut. Allerdings hast Du eben auch eine große Datenmenge, 860000 Zellen mit je über 400 Zeichen Text (gemessen an dem einen Zelltext-Beispiel, das Du preisgegeben hast) - Da tut sich schon was.
Hab den Code bei mir mal über 860000 Zellen laufen lassen, das läuft in etwas über 26 Sekunden durch. Alternativ hab ich eine zweite Variante erstellt, welche die gesamten 860000 Zellen jeweils in 100000-Blöcken bearbeitet - das läuft bei mir in etwa 25 Sekunden durch (ist also nicht großartig schneller). Das Ganze läuft bei mir unter Win7 Enterprise 64Bit, Office 2010 Pro, 2.30Ghzx2, 8GB RAM.
Hier mal die beiden Code-Varianten nochmal: https://www.herber.de/bbs/user/119457.txt
gleich in eine neue Excel Mappe schreiben
Ja, das ist prinzipiell schon möglich, aber ich glaube nicht, dass dies die Performance verbessern würde - in die Zellen wird ja dennoch geschrieben. Evtl. wär's eine Überlegung wert die große Zell-Menge zunächst häppchenweise in eine neue Datei zu schreiben (in mehrere Spalten, je zB 10.000 Zellen groß) und dann diese kleineren Blöcke in der neuen Datei nacheinander durchzugehen. Aber das ändert natürlich immer noch nichts an der Menge der Daten.
braucht das Makro die anderen Werte nicht löschen
Das versteh ich nicht; mein Makro löscht bisher keine Werte (außer Du hast in Spalte B bisher bereits etwas stehen, was dann natürlich überschrieben wird, aber ich kenne Deinen Aufbau nicht).
LG
Michael
Anzeige
AW: RegEx-Variante...
01.02.2018 13:59:42
Andreas
Hallo Michael,
Das mit dem WErte Löschen war ein versehen. Hatte nicht richtg geschaut:-(
Ich Denke das ist das problem gefunden habe bei meiner Datei.
Es liegt glaube ich an der zeile im Skript. Dazu bräuchte ich aber mal eine kurze erklärung was das skript damit ganau macht.
RegEx.Pattern = "\!\d\,\-?\d\.{1}\d*"
Meine Zelleninhalte sind aufgrund der Werte nicht immer gleich. manchmal auch -0.0..... .Das Skript steigt mit dem debugger in der Zeile ( b(i) = Mid(Matches(9), 4): Set Matches = Nothing) aus.
Wenn ich den Zelleninhalt in deiner Datei in 860000 Zellen kopiere, dann lauft das skript nur mit meinen reellen Daten nicht.
Ich packe mal die ersten 30 zeilen als Anhang mit rein.
https://www.herber.de/bbs/user/119465.xlsb
Viele Grüße
Andreas
Anzeige
AW: RegEx-Variante...
01.02.2018 15:06:15
Michael
Hallo!
RegEx.Pattern
Wie gesagt, mein Vorschlag basiert auf der Nutzung von Regulären Ausdrücken (kannst Du ja bei Interesse googlen); damit lässt sich ein Text (idF Dein Zell-Wert) nach Mustern durchsuchen. Gem. Deines ersten Beispiels bin ich davon ausgegangen, dass Du nur jene Werte aus dem Text suchst die sich nach dem Muster [Rufzeichen gefolgt von einer Ziffer gefolgt von einem Beistrich gefolgt von maximal einem Bindestrich(Minus) gefolgt von mindestens einer Ziffer gefolgt von genau einem Punkt gefolgt von einer Ziffernfolge unbestimmter Länge] auffinden lassen. Das ist jetzt schon basierend auf dem etwas angepassten Suchmuster, mit dem Du es auch noch versuchen kannst...
'...
RegEx.Pattern = "\!\d\,\-?\d{1,}\.{1}\d*"
'...
Wenn das nicht die gewünschten Ergebnisse bringt zeig mir doch bitte für die zuletzt von Dir hochgeladenen 30 Bsp-Zeilen auch jeweils den von Dir pro Zelle gesuchten Wert.
LG
Michael
Anzeige
AW: RegEx-Variante...
02.02.2018 07:36:22
Andreas
Hallo Michael,
hatte jetzt mal mit deinen Beispielen rumprobiert, aber leider holt er mir nochn ichtdie Zahlen die ich benötige.
Anbei Habe ich mal aus der Beispielliste die Zahlen rausgezogen, die ich benötige.
Hie mal die Werte.
https://www.herber.de/bbs/user/119486.xlsb
Die Werte stehen immer hinter dem 10. !1
Grüße Andreas
AW: RegEx-Variante...
02.02.2018 10:32:59
Michael
Hallo!
Also mein RegEx-Pattern funktioniert. Im Code hab ich leider noch eine Kleinigkeit vergessen, da war ich schlampig, deswegen hat die endgültige Ausgabe nicht vollständig gepasst.
Hier Deine Test-Datei retour: https://www.herber.de/bbs/user/119488.xlsm
Darin sind nun Deine 30 Bsp-Datensätze, dazu 30x Dein Wunsch-Ergebnis und mit Makro "a" (oder über die Schaltfläche) kannst Du nun den korrekten Durchlauf testen - aus meiner Sicht arbeiten sowohl Code als auch Suchmuster korrekt = Deinem Ziel entsprechend.
Achtung: Der Code bezieht sich immer auf Tabellenblatt 1, und der ursprüngliche Bereich ist hier jetzt A2:Ax - weil ich Überschriften hinzugefügt haben - das müsstest Du notfalls anpassen.
In der Datei ist auch noch Makro "b", das mit dem gleichen Suchmuster wie "a" arbeitet, aber die Verarbeitung der Daten in 100 000er-Paketen übernimmt - das kann ggf. erforderlich sein, bei Deiner großen Datenmenge - auch hier achte bitte darauf den Ausgangs-Zellbereich korrekt anzupassen.
Ausgabe erfolgt im Fall von "a" zwei Spalten rechts von den Originaldaten (da dazwischen noch Dein Wunsch-Ergebnis steht), im Fall von "b" in der direkt nächsten rechten Spalte.
Gib Bescheid, ob's klappt, aus meiner Sicht läuft es korrekt! V.a. bin ich froh, dass mein Suchmuster korrekt war ;-)
LG
Michael
Anzeige
AW: RegEx-Variante...
05.02.2018 11:04:07
Andreas
Hallo Michael,
es funktioniert. Hab es jetzt an meine Liste angepasst und es läuft.
vielen Dank für Deine Unterstützung.
Viele Grüße
Andreas
Super, freut mich! Gern, lg und owt
05.02.2018 13:15:52
Michael
AW: RegEx-Variante...
04.02.2018 07:52:03
Luschi
Hallo Andreas,
meine Lösung sieht so aus:

Sub c()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets(1)
Dim r As Range, rZ As Range, v As Variant, i As Integer
Application.ScreenUpdating = False
Set r = Ws.Range("A2:A" & Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row)
For Each rZ In r
v = Split(rZ.Value, "!", -1, vbTextCompare)(10)
i = InStr(1, v, ",", vbTextCompare)
'Wert als Dezimalzahl
rZ.Offset(0, 3).Value = Val(Mid(v, i + 1))
'Wert als String
rZ.Offset(0, 4).Value = "'" & Mid(v, i + 1)
Next rZ
Application.ScreenUpdating = True
Set Wb = Nothing: Set Ws = Nothing: Set r = Nothing
Set rZ = Nothing:
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: RegEx-Variante...
05.02.2018 11:06:44
Andreas
Hallo Luschi,
habe dein Skript auch ausprobiert und an meine Liste angepasst und es funktioniert auch super.
Alle Zeilen laufen in 45min. durch.
Vielen Dnak auch an dich für deine Hilfe.
Grüße
Andreas
AW: RegEx-Variante...
06.02.2018 10:42:08
Andreas
Hallo Luschi,
jetzt habe ich mit deinem Skripr ein wenig rumexperimentiert und es läuft super.
Danke dir noch mal dafür.
Zudem habe ich probiert zusätzlich den ersten Wert (8 Stellen der Urhzeit) mit auszuleiten und in eine Spalte davor einzufügen. Leider klappt das nicht so wir gewünscht.
Hast du eine Idee, wie ich das in dein Skript mit einbaue?
Grüße und vielen Dank schon mal im voraus für deine Hilfe.
Andreas
goo.gl/ePjvIx ... ;-), owT
06.02.2018 13:58:56
Michael
...
AW: goo.gl/ePjvIx ... ;-), owT
07.02.2018 09:21:43
Andreas
Hallo Michael,
beschäftige mich gerade mit dem Thema "Reguläre Ausdrücke.
Ich habe dein sKript Kopiert und möchte nun damit das Datum an erster Stele auslesen.
Klappt leider nicht so ganz. :-(
Gab folgendes Geändert.
RegEx.Pattern = "\d\d\:\d\d\:\d\d"
Irgendwie habe ich da ein Fehler drin. Wäre das nicht der Suchbegriff den er in der Zell suchen muss?
Grüße
Andreas

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige