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

sortieren der datel in Listbox

sortieren der datel in Listbox
20.02.2020 09:53:48
Thomas
Hallo Excelfreunde,
ich habe Daten in einer Listbox welche ich gern sortieren möchte.
Das Problem ist, in der Datumsspalte können sich auch Texte befinden ( oder auch leer).
Diese Struktur kann ich leider nicht ändern.
Also lese ich erst die Texte ein ( dann stehen diese oben in der Listbox ) und anschließend die Zeilen mit Datum.
Dies klappt auch schon ( nicht schön aber es funktioniert )
Was ich leider nicht schaffe ist erst die Zeilen mit den Texten ( in der Datumsspalte ) zu sortieren. Diese sollen aber in der Listbox oben stehen bleiben ( halt nur nach Nachnahme sortiert).
In meinem Beispiel kann man hoffentlich erkennen wie ich dies meine.
https://www.herber.de/bbs/user/135307.xlsm
Kann mir jemand bei diesem Problem helfen?
Schon mal rechtvielen dank für euer Interesse.
Mfag Thomas

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sortieren der datel in Listbox
20.02.2020 15:42:29
Matthias
Moin!
Hier mal eine Variante zu deinem Code. Um das sortieren im Code zu umgehen, sortiere ich erst dein Blatt speicher die Daten und sortiere es zurück. Damit habe ich die Daten sortierte vorlegen. Dann gehen ich durch die Liste (die Variable daten im Code). Ist es ein Datum, füge ich es normal am Ende ein. Ist es ein Datum wird es am Anfang eingefügt. Dabei merke ich mir in zeile die Anzahl der Texte und füge es dann an der bestimmten Stelle ein. Bei Additem kannst du mit angegeben, an welcher Stelle es eingefügt werden soll. Sieht dann so aus.
Private Sub Listbox1_fuellen()
Dim lngZeile As Long, lngTemp As Long
Dim strTemp As String, strTemp1 As String, strTemp2 As String, strTemp3 As String
Dim ws As Worksheet
Dim ende As Long, daten, zeile As Long
Application.ScreenUpdating = False
Set ws = Worksheets("PROJEKT")
ListBox1.Clear
ListBox1.AddItem
'   Überschrift
ListBox1.List(0, 0) = "Komm-Nr"
ListBox1.List(0, 1) = "Datum"
ListBox1.List(0, 2) = "Vorname"
ListBox1.List(0, 3) = "Nachnahme"
'   Datensätze
ende = ws.Cells(Rows.Count, 1).End(xlUp).Row
'sortieren
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("O2:O25") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange ws.Range("A1:P25")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
daten = ws.Range("A1:P" & ende)
'sortieren zurück
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("A2:A25") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange ws.Range("A1:P25")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
'jetzt einelsen
For lngZeile = 2 To ende
If IsDate(daten(lngZeile, 15)) Then         's
If CLng(daten(lngZeile, 15))  CLng(Date) - CLng(vorher) Then
ListBox1.AddItem
lngTemp = ListBox1.ListCount - 2
ListBox1.List(lngTemp + 1, 0) = daten(lngZeile, 1)
ListBox1.List(lngTemp + 1, 1) = daten(lngZeile, 15)
ListBox1.List(lngTemp + 1, 2) = daten(lngZeile, 2) 'Format(ws.Cells( _
lngZeile, 2), "#"".""##"".""###"".""#"".""#") 'WS.Cells(lngZeile, 1)
ListBox1.List(lngTemp + 1, 3) = daten(lngZeile, 3)
End If    's
Else
'Texte
zeile = zeile + 1
ListBox1.AddItem daten(lngZeile, 1), zeile
ListBox1.List(zeile, 1) = daten(lngZeile, 15)
ListBox1.List(zeile, 2) = daten(lngZeile, 2) 'Format(ws.Cells(lngZeile, 2), "#"".""# _
#"".""###"".""#"".""#") 'WS.Cells(lngZeile, 1)
ListBox1.List(zeile, 3) = daten(lngZeile, 3)
End If
Next
End Sub
VG
Anzeige
perfekt , besten dank an Matthias
20.02.2020 18:04:07
Thomas
Hallo Matthias,
das ist richtig cool was du da gemacht hast. Es funktioniert perfekt.
Besten dank auch für deine super Erklärung. Dann kann ich das sogar ein wenig verstehen.
Interessant finde ich auch das man von dem sortieren der Daten gar nichts mitbekommt. Dies werde ich mir gut merken und gesondert abspeichern. Mit dieser Lösung kann man solche Probleme echt gut lösen.
Zu diesem ganzen kommt noch das dies viel schneller ist als mein nicht richtig funktionierender Ansatz. So wie ich dies zur Zeit sehe gehst du alles nur einmal durch. Mit meiner Variante muss ich ich mich viermal durch die Listbox Zeilen durch hangeln.
cool hab recht vielen dank
mfg Thomas
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige