Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zelleninhalt sortieren
#1
   
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

Ausgabe = Join(Ar, Chr(10))

Range(ActiveCell.Address).Value = Ausgabe
Antworten Top
#2
Hallo MisterA,

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...

Gruß,
Lutz
Antworten Top
#3
=LET(

T2D;LAMBDA(x;t;LET(y;t&x&t;m;LÄNGE(t);
n;MAX(NACHZEILE(y;LAMBDA(a;(LÄNGE(a)-LÄNGE(WECHSELN(a;t;))-m)/m)));
WENNFEHLER(TEXTNACH(TEXTVOR(y;t;SEQUENZ(;n;2));t;SEQUENZ(;n;1));"")));

x;WECHSELN(MTRANS(T2D(A1;ZEICHEN(10))&"  ");": ";" | ");
y;T2D(x;" | ");
z;SORTIEREN(y;{1.2});
a;NACHZEILE(z;LAMBDA(b;TEXTVERKETTEN({" | ".": "};;b)));
TEXTVERKETTEN(ZEICHEN(10);;a))
Antworten Top
#4
Meine Lösung wird eh keiner verwenden. Korrektur: Die Definition z wird angepasst (damit das Datum korrekt sortiert wird):

z;SORTIERENNACH(y;--INDEX(y;;1);1;INDEX(y;;2);1);
Antworten Top
#5
Es geht kürzer, da Datum und Zeit hintereinander stehen:

=LET(
x;TEXTTEILEN(A1;;ZEICHEN(10));
z;TEXTVERKETTEN(ZEICHEN(10);;SORTIERENNACH(x;--TEIL(WECHSELN(x;"| ";);2;19)));
z)


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.
Antworten Top
#6
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.

Gibts da noch eine Lösung?
Antworten Top
#7
Hallo MisterA,

da ist die Frage, wie Du die Uhrzeit zum Datum dazu abgegriffen hast.

Aufbauend auf meiner zuvor geposteten Lösung würde ich versuchen, den Zeitstempel so abzugreifen:
Code:
CDate(mid(Ar(Wert1),2,10)+mid(Ar(Wert1),15,8))
Gruß,
Lutz
Antworten Top
#8
Hallo Lutz,

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) & ": "

Gruß


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
Hallo MisterA,

ich halte es da mit einem weiteren Mitglied dieses Forums, ich bastel keine Dateien nach....

Poste doch einfach mal eine Beispieldatei mit anonymisierten Daten und deinen Code....

Gruß,
Lutz
Antworten Top
#10
Hallo Lutz,

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 

Gruß


Angehängte Dateien
.xlsm   LOP.xlsm (Größe: 704,82 KB / Downloads: 3)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste