Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
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

Sortierung Datum in Listitems

Sortierung Datum in Listitems
06.03.2024 18:23:32
Richi
Hallo Zusammen
Ich will meine Listbox sortieren nach Datum. Verwende ich das in unseren Breiten gebräuchliches Datumsformat "DD.MM.YYYY" funtioniert Sortierung nicht. Die Sortierung geht nach Tag aufsteigend und berücksichtigt die Monate und Jahre nicht.
Verwende ich das Amerikanische Format "YYYY.MM.DD" funktioniert die Sortierung einwandfrei.

Hat jemand von euch eine Lösung wie das hier gebräuchliche Datumsformat richtig sortiert werden kann?

.ListItems.Add , , Format(CDate(wsDi.Cells(lngZeile, 10)), "YYYY.MM.DD") ==> funktioniert
.ListItems.Add , , Format(CDate(wsDi.Cells(lngZeile, 10)), "DD.MM.YYYY") ==> funktioniert nicht

Gruss Richi

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 18:34:19
Richi
Ich korrigiere meine Aussage. "YYYY.MM.DD" ist natürlich nicht das Amerikanische Format. Trotzdem mit dieser Formatierung läuft Sort.
AW: Sortierung Datum in Listitems
06.03.2024 18:49:03
Onur
Also nur:

.ListItems.Add , , wsDi.Cells(lngZeile, 10) 
AW: Sortierung Datum in Listitems
06.03.2024 19:54:26
daniel
Hi
dann füge doch einfach zwei Datumsspalten zu deiner Liste hinzu, eine zum anschauen und die andere zum sortieren (diese kannst du ja ausblenden)
btw. die Schreibweise YYYY-MM-DD ist auch in Deutschland schon seit vielen Jahren die vorgeschriebene Norm und jeder, der schon mal Dateinamen mit Datum verwendet hat weiß warum.
Dass das heute immer noch ein Problem ist, verwundert und zeigt die deutsche Starrköpfigkeit.
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 22:55:44
Alwin Weisangler
Hallo Miteinander,

das einzige was man machen kann ohne die Tabelle nach Datum umsortiert einzulesen, ist im LvExtData_ColumnClick Ereignis den Aufruf der Spalte abfangen, den Inhalt der Listview in ein Array laden, das Array mit Quicksort (muss auch entsprechend aufbereitet werden) nach Datum sortieren und ins Listview zurückschreiben.
Während dieses Vorgangs muss die Sortierfunktion ausgeschaltet werden, da sonst der Code ewig leiert. Danach wird die Sortierfunktion wieder auf True gesetzt.
Auffangen so:


Private Sub LvExtData_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With Me.LvExtData
If ColumnHeader = "End Date" Then ...

Listview kann nur Text. Zahlen kann man nur mit vorangestellten Nullen sortieren a la 0001 , 0002 etc.
Das ist leider so.
Wenn ich den Code sehe vermute ich, dass es für dich bei "VBA bescheiden" nur müßig lösbar ist.
Wenn du etwas Geduld hast, würde ich dir das Userform "UfImport" als Vorlage mal entsprechend umbauen. Es kann etwas dauern, da ich leider zur Zeit viel unterwegs bin.

Gruß Uwe

Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 23:32:13
Richi
Das wäre natürlich wahnsinnig nett. Aktuell läuft es.Bin jedoch immer für effizientere Lösung abnehmer.
Herzlichen Dank schon mal

Liebe Gruess
Richi
AW: Sortierung Datum in Listitems
07.03.2024 11:24:24
Alwin Weisangler
Hallo Richi,

anbei deine Datei. Irgendwo waren da auch schon Dateifehler drin, da nach dem Öffnen der Datei Excel erst mal in den Reparaturmodus ging.

Umgebaut habe ich das Userform "UfImport".
Der Sortiermechanismus der Listview ist False.

Ansonsten wird nun um in allen Spalten ordentlich sortiert, egal ob Datum, Zahlen oder Text. Dies über einen angepassten Quicksort Algoritmus geregelt.
Damit klappt es auch von der 1. Spalte an.

Die Vorgaben (Spaltennamen, Zeilennummern ...) sind in Arrays gepackt und können angepasst werden.
Das Klickevent der Listview Zellen habe ich zwecks Umbaus rausgenommen.
Das Klickevent kannst du entsprechend passend zu dem Vorhanden anpassen.
https://www.herber.de/bbs/user/167842.xlsm

Gruß Uwe
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 18:59:42
Richi
Besten Dank
Das hab ich gemacht. Trotzdem wird Datum nur nach Tage sortiert Monat und Jahr wird ignoriert. Die Zellen woraus ich das Datum ziehe, haben Format "D1". Von daher kanns nicht an einer falsche Formatierung der Zelle liegen.
AW: Sortierung Datum in Listitems
06.03.2024 19:00:50
Onur
Dann poste doch mal die Datei oder eine Magerversion davon.
AW: Sortierung Datum in Listitems
06.03.2024 19:09:51
Richi
Tut mir leid kann keine Version senden. Sensitive Daten. Sorry. Mir klar schlecht für mich.
AW: Sortierung Datum in Listitems
06.03.2024 19:11:38
Onur
Sensitive Daten? Brauche ich nicht, Lösche alles bis auf den Code und die Datumsfelder, die in die Listbox kommen. Datum kann ja wohl nicht "top secret" sein!
AW: Sortierung Datum in Listitems
06.03.2024 20:52:45
Onur
DAS austauschen:
Private Sub lvRec_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

Dim LI
If ColumnHeader.Text = "Date Start Work" Then
For Each LI In lvRec.ListItems
oListItem.SubItems(3) = Format$(LI.ListSubItems(3).Text, "yyyymmdd")
Next LI
End If

With Me.lvRec
.Sorted = True
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If
.SortKey = ColumnHeader.Index - 1
End With

If ColumnHeader.Text = "Date Start Work" Then
For Each LI In lvRec.ListItems
LI.SubItems(3) = Format(CDate(Format(LI.ListSubItems(3).Text, "####/##/##")), "dd/mm/yyyy")
Next LI
End If
End Sub
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 21:11:53
Onur
Sorry, kleiner Fehler aus Testphase:
Private Sub lvRec_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

Dim LI
If ColumnHeader.Text = "Date Start Work" Then
For Each LI In lvRec.ListItems
LI.SubItems(3) = Format$(LI.ListSubItems(3).Text, "yyyymmdd")
Next LI
End If

With Me.lvRec
.Sorted = True
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If
.SortKey = ColumnHeader.Index - 1
End With

If ColumnHeader.Text = "Date Start Work" Then
For Each LI In lvRec.ListItems
LI.SubItems(3) = Format(CDate(Format(LI.ListSubItems(3).Text, "####/##/##")), "dd/mm/yyyy")
Next LI
End If
End Sub
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 21:39:56
Richi
DAnke habs korrigiert läuft. Clever gelöst :-)
Hab noch ein zweitesin UfImport. Hab deinen Cod Kopiert. Da gerate ich in einen überlauf.
Das Datum ist in der ersten Spalte. Die LI.ListSubItems(1) schein noch ein problem zu sein.
---------------------------------------------------
Private Sub LvExtData_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
' With Me.LvExtData
' .Sorted = True
' If .SortOrder = lvwAscending Then
' .SortOrder = lvwDescending
' Else
' .SortOrder = lvwAscending
' End If
' .SortKey = ColumnHeader.Index - 1
' End With

Dim LI
If ColumnHeader.Text = "End Date" Then
For Each LI In LvExtData.ListItems
LI.ListSubItems(1) = Format$(LI.ListSubItems(1).Text, "yyyymmdd")
Next LI
End If

With Me.LvExtData
.Sorted = True
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If
.SortKey = ColumnHeader.Index - 1
End With

If ColumnHeader.Text = "End Date" Then
For Each LI In LvExtData.ListItems
LI.SubItems(1) = Format(CDate(Format(LI.ListSubItems(1).Text, "####/##/##")), "dd/mm/yyyy")
Next LI
End If

End Sub
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 21:41:39
Onur
Dann müsste ListSubItem eigentlich 0 sein.
AW: Sortierung Datum in Listitems
06.03.2024 21:48:54
Richi
Das Dachte ich auch.
Da kommt Fehler List out of Bounds.
Hat das nicht etwas mit subItems zu tun?
AW: Sortierung Datum in Listitems
06.03.2024 22:26:26
Onur
Noch simplere Version: (sollte auch mit der anderen LVB laufen können)
Private Sub LvExtData_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

Dim LI
If ColumnHeader.Text = "End Date" Then
For Each LI In LvExtData.ListItems
LI.Text = Format$(LI.Text, "yyyymmdd")
Next LI
End If

With Me.LvExtData
.Sorted = True
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If
.SortKey = ColumnHeader.Index - 1
End With

If ColumnHeader.Text = "End Date" Then
For Each LI In LvExtData.ListItems
LI.Text = CDate(Format(LI.Text, "####/##/##"))
Next LI
End If
End Sub
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 22:41:22
Richi
Herzlichen Dank. Dieser Code Sortiert nicht alles exakt. Der nicht optimierte :-) funktioniert einwandfrei.
Hab zwischenzeitlich eine Lösung für die Sortierung der ersten Spalte gefunden (nicht ganz Stubenrein) aber funktioniert. Lese eine weitere Spalte als erste Spalte ein und zeige die beim Listing nicht an.
Geht und erfüllt seinen Zweck :-).

Bin gespannt wie schnell der Code läuft mit mehr als 1000 Einträgen.

Nochmals herzlichen Dank für deine Bemühungen.

Liebe Gruess
Richi
Gerne !
06.03.2024 22:51:22
Onur
AW: Sortierung Datum in Listitems
06.03.2024 19:09:38
Onur
haben Format "D1" ??
Was soll das sein?
Ändere das Format der Zellen mal auf "Standard", wenn dann da eine 5-stellige Zahl steht, ist es korrekt, wenn nicht, stimmt da schon etwas nicht.
Anzeige
AW: Sortierung Datum in Listitems
06.03.2024 19:14:08
Richi
Standard zeigt Datumsnummern an. Alles im grünen Bereich
AW: Sortierung Datum in Listitems
06.03.2024 19:15:08
Onur
Poste die (Beispiels-) Datei.
AW: Sortierung Datum in Listitems
06.03.2024 20:58:50
Onur
ListView´s Sort-Funktion ist ja praktisch, kann aber nur Texte sortieren.
AW: Sortierung Datum in Listitems
06.03.2024 18:44:37
Onur
Lass das FORMAT weg, das verwandelt die Datumswerte in TEXT, und als Text klappt die Sortierung nur im YYYYMMDD-Format, da ja zuerst alle Datumswerte mit Tag 1 (1.3.2024 ;1.4.2024 ;1.5.204 usw) kämen.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige