Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte in einer Listbox sortieren

Forumthread: Werte in einer Listbox sortieren

Werte in einer Listbox sortieren
05.03.2014 14:11:54
Sebastian

Hallo Profis,
ich habe wieder ein Problem und suche schon seit Stunden eine Lösung.
Ich möchte in einem Userform Werte einer mehrspaltigen Listbox sortieren. Die Werte stammen aus einer Tabelle. Ich möchte gerne nach Datum und Zeit sortieren lassen. einmal absteigend und dann aufsteigend.
Anbei mal die Tabelle mit Userform.
https://www.herber.de/bbs/user/89541.xls
Vielen Dank schonmal für hilfe

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte in einer Listbox sortieren
05.03.2014 14:44:15
Peter
Hallo Sebastian,
warum kopierst Du bei Klick auf den jeweiligen Sortier-Button, die Daten nicht in ein separates Tabellenblatt, sortierts dort mit Excel-Mitteln und füllst daraus die ListBox?
Gruß Peter

AW: Werte in einer Listbox sortieren
05.03.2014 14:52:21
Sebastian
Das habe ich bisher auch so gemacht - aber ist das auch sinnvoll?

Anzeige
AW: Werte in einer Listbox sortieren
05.03.2014 15:00:50
Matze
Hi Sebastian,
was auch immer "Sinnvoll" ist,....
Die Recherche hier im Forum zu nutzen sollte immer der erste Weg sein,
https://www.herber.de/mailing/UserForm-ListBox-Eintraege_sortieren.htm
nur mal so am Rande erwähnt,...
Matze

Anzeige
AW: Werte in einer Listbox sortieren
05.03.2014 15:11:33
Sebastian
Hallo Matze,
Genau das mach ich auch immer, einen Beitrag zu schreiben ist dann wirklich die letzte Rettung.
Den Code aus deinem Link habe ich auch schon gefunden, nur nicht zum Laufen bekommen :-(
Sinnvoll ist, ich denke das geht schneller als wenn ich es vorsortiernen lasse.
Viele Grüße und vielen Dank
Sebastian

Anzeige
AW: Werte in einer Listbox sortieren
05.03.2014 15:17:13
Oberschlumpf
Hi Sebastian,
grundsätzlich hat Matze schon recht.
Erst mal selber suchen.
Aber ok, vielleicht hast du das ja auch getan, und sogar den Link gefunden, konntest damit aber nix anfangen.
Ich selbst mache es aber auch wie du.
Wenn ich mal ne Listbox sortiert darstellen muss, extrahiere ich die gewünschten Daten zuerst in eine Hilfstabelle, die ja auch immer ausgeblendet sein kann, sortiere dann mit Excel-Mitteln und füge die Daten erst dann der Listbox hinzu.
Sinnvoll mag diese Vorgehensweise nicht gewesen sein, als wir noch mit Computern gearbeitet haben, die nur eine "geringe" Taktgeschwindigkeit hatten, weil das Sortieren in einer Tabelle mitunter "länger" dauert als direkt mit VBA-Code.
Aber heute, zu Zeiten mit Dual-,Quad- und sogar 8fach-Bereifung..ähh...8 Prozessoren in einem Kern :-), ist es egal, wie du sortierst - hauptsache der Aufwand zum Erreichen des Ziels ist gering.
Somit würde ich sagen: Lass es so, wie es ist.
Ciao
Thorsten

Anzeige
AW: Werte in einer Listbox sortieren
05.03.2014 15:36:11
Bastian
Hallo Sebastian,
so geht es auch nur mit VBA. Genutzt wird je ein BubbleSort Algorithmus. Einmal für aufsteigende Sortierung, und einmal für absteigende Sortierung.
Gruß, Bastian

Option Explicit
Private Sub UserForm_Initialize()
Dim lngZeile As Long
lngZeile = 11
Do
ListBox1.ColumnCount = 6
ListBox1.ColumnWidths = "0cm;2cm;4cm;2cm;2cm;3cm"
ListBox1.AddItem Cells(lngZeile, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(lngZeile, 2)
ListBox1.List(ListBox1.ListCount - 1, 2) = Format(Cells(lngZeile, 3), "dd.mm.yyyy")
ListBox1.List(ListBox1.ListCount - 1, 3) = Format(Cells(lngZeile, 4), "hh:mm")
ListBox1.List(ListBox1.ListCount - 1, 4) = Format(Cells(lngZeile, 5), "hh:mm")
ListBox1.List(ListBox1.ListCount - 1, 5) = Cells(lngZeile, 6)
lngZeile = lngZeile + 1
Loop While Cells(lngZeile, 2)  ""
End Sub
Private Sub CommandButton1_Click()
Call BubbleSortUp(0, ListBox1.ListCount - 1, 2)
End Sub
Private Sub CommandButton2_Click()
Call BubbleSortDown(0, ListBox1.ListCount - 1, 2)
End Sub
Function BubbleSortUp(lngLBound As Long, lngUBound As Long, bytSpalte As Byte)
Dim j As Long
Dim i As Long
Dim k As Long
Dim vTemp As Variant
For j = lngUBound - 1 To lngLBound Step -1
' Alle links davon liegenden Zeichen auf richtige Sortierung
' der jeweiligen Nachfolger überprüfen:
For i = lngLBound To j
' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
If CDate(ListBox1.List(i, bytSpalte)) > CDate(ListBox1.List(i + 1, bytSpalte)) Then
' Element und seinen Nachfolger vertauschen.
For k = 1 To 5
vTemp = ListBox1.List(i, k)
ListBox1.List(i, k) = ListBox1.List(i + 1, k)
ListBox1.List(i + 1, k) = vTemp
Next k
End If
Next i
Next j
End Function
Function BubbleSortDown(lngLBound As Long, lngUBound As Long, bytSpalte As Byte)
Dim j As Long
Dim i As Long
Dim k As Long
Dim vTemp As Variant
For j = lngUBound - 1 To lngLBound Step -1
' Alle links davon liegenden Zeichen auf richtige Sortierung
' der jeweiligen Nachfolger überprüfen:
For i = lngLBound To j
' Ist das aktuelle Element seinem Nachfolger gegenüber korrekt sortiert?
If CDate(ListBox1.List(i, bytSpalte)) 

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Werte in einer Listbox sortieren


Schritt-für-Schritt-Anleitung

Um Werte in einer Listbox mit VBA zu sortieren, kannst du folgende Schritte befolgen:

  1. Userform erstellen: Erstelle ein Userform in Excel, das eine Listbox und zwei Schaltflächen für die Sortierung enthält.

  2. Daten in die Listbox laden: Füge den Code hinzu, um Daten aus einer Tabelle in die Listbox zu laden. Hier ist ein Beispiel für den Code:

    Private Sub UserForm_Initialize()
        Dim lngZeile As Long
        lngZeile = 11
        Do
            ListBox1.AddItem Cells(lngZeile, 1)
            ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(lngZeile, 2)
            ListBox1.List(ListBox1.ListCount - 1, 2) = Format(Cells(lngZeile, 3), "dd.mm.yyyy")
            lngZeile = lngZeile + 1
        Loop While Cells(lngZeile, 1) <> ""
    End Sub
  3. Sortierfunktionen implementieren: Implementiere die Sortierlogik, z.B. mit einem BubbleSort, um die Listbox nach einer bestimmten Spalte (z.B. Datum) zu sortieren:

    Private Sub CommandButton1_Click()
        Call BubbleSortUp(0, ListBox1.ListCount - 1, 2) ' Aufsteigend sortieren
    End Sub
    
    Private Sub CommandButton2_Click()
        Call BubbleSortDown(0, ListBox1.ListCount - 1, 2) ' Absteigend sortieren
    End Sub
  4. Sortierfunktionen erstellen: Definiere die BubbleSort-Funktionen für die aufsteigende und absteigende Sortierung:

    Function BubbleSortUp(lngLBound As Long, lngUBound As Long, bytSpalte As Byte)
        ' Sortierlogik hier
    End Function
    
    Function BubbleSortDown(lngLBound As Long, lngUBound As Long, bytSpalte As Byte)
        ' Sortierlogik hier
    End Function

Häufige Fehler und Lösungen

  • Problem: Die Listbox zeigt keine Daten an.
    Lösung: Stelle sicher, dass die Zellen, aus denen die Daten geladen werden, tatsächlich Werte enthalten und dass der richtige Zeilenbereich angegeben ist.

  • Problem: Fehler beim Sortieren.
    Lösung: Überprüfe den Datentyp der Spalte, die du sortieren möchtest. Wenn du nach Datum sortierst, sollte die Spalte tatsächlich Datumstypen enthalten.


Alternative Methoden

Eine andere Möglichkeit, eine Listbox zu sortieren, besteht darin, die Daten zuerst in ein separates Tabellenblatt zu kopieren, dort zu sortieren und dann die sortierten Daten zurück in die Listbox zu laden. Dies kann besonders nützlich sein, wenn du mit größeren Datenmengen arbeitest und die Performance verbessern möchtest.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine Listbox mit Daten aus einer Excel-Tabelle sortieren kannst:

Option Explicit
Private Sub UserForm_Initialize()
    Dim lngZeile As Long
    lngZeile = 2 ' Erste Zeile mit Daten
    Do
        With ListBox1
            .AddItem Cells(lngZeile, 1)
            .List(.ListCount - 1, 1) = Cells(lngZeile, 2)
            .List(.ListCount - 1, 2) = Format(Cells(lngZeile, 3), "dd.mm.yyyy")
        End With
        lngZeile = lngZeile + 1
    Loop While Cells(lngZeile, 1) <> ""
End Sub

Füge die oben genannten Sortierfunktionen hinzu, um die Listbox nach Datum auf- oder absteigend zu sortieren.


Tipps für Profis

  • Verwende Arrays: Bei größeren Datensätzen kann es effizienter sein, die Daten in ein Array zu laden, bevor du sie in die Listbox einfügst. Dies kann die Performance erheblich steigern.

  • Vermeide redundante Berechnungen: Wenn du oft sortierst, speichere die sortierten Daten zwischen, anstatt sie bei jedem Klick neu zu sortieren.

  • Nutze die Filteroptionen: Überlege, ob du die Listbox mit Filteroptionen erweitern möchtest, um die Benutzererfahrung zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten in der Listbox sortieren?
Du kannst die BubbleSort-Funktion so erweitern, dass sie auch nach mehreren Spalten sortiert, indem du die Sortierlogik entsprechend anpasst.

2. Ist es möglich, die Listbox automatisch zu aktualisieren?
Ja, du kannst die Listbox so einstellen, dass sie sich automatisch aktualisiert, wenn sich die Quelldaten ändern. Verwende dazu das Ereignis Worksheet_Change.

3. Welche Excel-Version wird benötigt?
Die obigen Beispiele sind für Excel 2010 und spätere Versionen geeignet. Achte darauf, dass dein Excel VBA aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige