23.10.2023, 13:44 (Dieser Beitrag wurde zuletzt bearbeitet: 23.10.2023, 19:01 von Kuwer.)
Hallo,
Ich habe in einer Zelle Diverse Einträge die mit Zeilenumbruch getrennt sind (siehe Bild), ich möchte diese sortieren nach Datum, Rückwirdkend vom aktuellen. Im Augenblick sortiere ich das wie im Code unten, zerteilen in einzelne Werte nach Zeilenumbruch, sortieren und wieder zusammensetzen in einen String, das Problem ist, er sortiert immer nur nach den ersten 2 Zahlen und nicht nach dem kompletten Datum. Wie könnte ich das anders machen? Die Datei ist leider ein ziemliches Monstrum und dieses Schreiben in eine Zelle ist ziemlich dumm, aber leider ist es so. Danke!
Dim Ar() As String Dim A As String Dim Wert1 As Integer Dim Wert2 As Integer Dim Temp As String Dim Ausgabe As String Dim zeLLe As Range Dim umbrPos As Long Dim I As Integer
A = Range(ActiveCell.Address).Value Ar = Split(A, Chr(10))
For Wert1 = 1 To UBound(Ar) For Wert2 = Wert1 + 1 To UBound(Ar) If Ar(Wert1) < Ar(Wert2) Then Temp = Ar(Wert1) Ar(Wert1) = Ar(Wert2) Ar(Wert2) = Temp End If Next Wert2 Next Wert1
Du teilst deinen String in die Einzelteile, die wieder Strings sind und entsprechend alphabetisch sortiert werden. Probier mal, ob Du mit
Code:
If CDate(mid(Ar(Wert1),2,10) < CDate(mid(Ar(Wert2),2,10) Then
weiterkommst. Der Code nimmt beginnend mit dem zweiten Zeichen die folgenden 10 Zeichen und wandelt sie in ein Datum um. Wenn Du diese jetzt vergleichst, sollten sie richtig sortiert werden.
Voraussetzung ist natürlich, dass in diesem Fall das Datum IMMER am zweiten Zeichen beginnt und IMMER im Format TT.MM.JJJJ vorliegt. Sollte das nicht so sein, musst Du je nach Qualität der Daten gaaaanz viel Hirnschmalz reinstecken...
Außerdem habe ich erst jetzt die Minuszeichen gesehen. Dies wieder als dringender Hinweis, hier keine Fotos zu präsentieren!
Das "Start" habe ich als nichtexistent angenommen. Man kann es wegWECHSELN und am Ende wieder vorhängen. Aber die separate Fettschreibe geht schon mal gar nicht.
Danke Lutz und Cohen für die Antworten. Leider sind Formeln nicht erwünscht, werde sie aber trotzdem mal ausprobieren, aus reinem Interesse :)
Der Code funktioniert mit dem Datum, hätte noch versucht die Zeit mit dazu zu nehmen, das klappt aber nicht so recht, da macht er ganz wilde Sortierungen. Habe auch nochmal versucht ein zweites mal die Schleife laufen zu lassen, nachdem zuerst das Datum sortiert wurde, und dann beim zweite mal nur die Zeit, sofern das Datum in beiden Variablen gleich ist, gab aber auch keine guten Ergebnisse.
so hatte ich es auch versucht, das funktioniert aber nicht, da er dann auch das Datum wieder falsch sortiert, also der 27.08.2023 steht dann plötzlich über dem 27.10.2023.
Wenn ich es nur mit Datum sortier klappt alles, aber da habe ich das Problem, dass er eben die aktuellsten Einträge eines Tages dann zeitlich immer ganz unten hinschreibt statt oben. In dem Bild im Anhang müßte eigentlich Eintrag 3 ganz oben stehen.
Das Datum und die ZEit wird damit erzeugt: vorbelegung = "-" & Date & " | " & TimeValue(Now) & ": "
die Datei selbst ist ja nicht von mir, habe sie bekommen um verschiedene Sachen hinzuzufügen und zu ändern. Die restliche Datei selbst ist total unübersichtlich und unglaublich aufgebläht mit Code.
Kann die Datei anhängen , aber ob das was bringt und sinnvoll ist, keine Ahnung.
Im Code der Userform habe ich die Sortierung hinzugefügt, zu finden mit der Kommentierung: 2023