Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Listbox sortieren

Listbox sortieren
11.08.2005 13:24:37
Tobias
Hallo,
ich suche eine Möglichkeit die Zeilen, die in einer ListBox stehen zu sortieren, nachdem die Listbox gefüllt wurde. Da Sie aus mehreren Funktionen gefüllt wird, steht der Inhalt unsortiert drin, was aber sehr unübersichtlich ist. Die Sortierung soll nach der ersten Spalte lexikographisch erfolgen.
Mfg,
DerTobi
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox sortieren
Klamsi
Vielleicht mach das hier was du willst.
Keine ahnugn was da genau passiert, aber die Funktion heit "SortListBox"... könnte also klappen ;-)
Probier mal aus, obs das ist was du dir vorstellst.
Grüße, Klamsi

Sub SortListBox()
Dim iLast As Integer, iNext As Integer
Dim iTmp
With ListBox1
For iLast = 0 To .ListCount - 1
For iNext = iLast + 1 To .ListCount - 1
If .List(iLast) > .List(iNext) Then
iTmp = .List(iLast)
.List(iLast) = .List(iNext)
.List(iNext) = iTmp
End If
Next iNext
Next iLast
End With
End Sub

Anzeige
AW: Listbox sortieren
11.08.2005 14:29:47
Heiko
Hallo Tobi,
hier mal ein Makro was ich mir dazu geschrieben habe. Hättest du auch im Archiv finden können.

Sub SortBox(cltBox As Control, intSpalten As Integer, _
intSpalte As Integer, Optional bytWie As Byte = 1)
' So DIS 28.04.05
' SortBox sortiert nicht gebundene List- und Comboboxen. Gebundene List- und Comboboxen
' (Angabe bei RowSource oder ListFillRange) können nicht sortiert werden.
' cltBox     : Name der Listbox die sortiert werden soll.
' intSpalten : Wieviele Spalten sollen mit sortiert werden. Sollte der Anzahl der Spalten
'              in der Listbox entsprechen
' intSpalte  : Nach welcher Spalte soll sortiert werden.
' bytWie     : 1 oder Nicht angegeben als Text
'            : 2 als Zahl, dann muß die ganze Spalte Zahlen enthalten.
'            : 3 als Datum, dann muß die ganze Spalte Datumwerte enthalten.
' Aufruf zum Beispiel so: ListBox1 mit 7 Spalten, Sortierung nach Spalte 1 Sortierordnung Text
' SortBox ListBox1, 7, 1  oder SortBox ListBox1, 7, 1, 1
' Oder so    : Listbox17 mit 2 Spalten, Sortierung nach Spalte 2 Sortierordnung Zahlen
' SortBox ListBox17, 2, 2, 2
Dim intLast As Integer, intNext As Integer, intCounter As Integer, intFehler As Integer
Dim strTmp As String, strFehlertext As String
Dim variLast As Variant, variNext As Variant
On Error GoTo Errorhandler
intFehler = 0
With cltBox
For intLast = 0 To .ListCount - 1
For intNext = intLast + 1 To .ListCount - 1
Select Case bytWie
Case 1
intFehler = 0
variLast = CStr(.List(intLast, intSpalte - 1))
variNext = CStr(.List(intNext, intSpalte - 1))
Case 2
intFehler = 1
variLast = CDbl(.List(intLast, intSpalte - 1))
variNext = CDbl(.List(intNext, intSpalte - 1))
Case 3
intFehler = 2
variLast = CDate(.List(intLast, intSpalte - 1))
variNext = CDate(.List(intNext, intSpalte - 1))
End Select
intFehler = 0
If variLast > variNext Then
For intCounter = 0 To intSpalten - 1
strTmp = CStr(.List(intLast, intCounter))
.List(intLast, intCounter) = CStr(.List(intNext, intCounter))
.List(intNext, intCounter) = strTmp
Next intCounter
End If
Next intNext
Next intLast
End With
Exit Sub
Errorhandler:
Select Case intFehler
Case 0
strFehlertext = "In der Listbox Sortierung ist ein Fehler aufgetreten !"
Case 1
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Zahlen !"
Case 2
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Datumswerte !"
Case Else
strFehlertext = "Unerwarteter Fehler !"
End Select
MsgBox strFehlertext & " Bitte informieren Sie 'So' ! " & vbCr & vbCr & _
"Fehler aufgetreten in " & cltBox.Name & " !" & vbCr & _
"Fehlernummer = " & Err.Number & vbCr & _
"Fehlerbeschreibung = " & Err.Description & vbCr & _
"Fehlersource = " & Err.Source, vbCritical, " Meldung vom Makro SortBox !"
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Listbox sortieren
12.08.2005 13:29:14
Tobias
Hallo Heiko, danke für die Hilfe
Allerdings bekomme ich die Fehlermeldung, "Laufzeitfehler 13: Typen unverträglich"
Mit der Frage zusammenhängend: was ist eine gebundene/ungebundene Listbox ?
Mfg,
DerTobi
AW: Listbox sortieren
12.08.2005 16:35:00
Heiko
Hallo
Gebundene Listen sind List und Comboboxen die über RowSource an einen Tabellenbereich gekoppelt sind. Die können nicht mit dem Makro sortiert werden, da müßte der Tabellenbereich sortiert werden.
Zu Typen unverträglich, was sagt den meine Fehlerauswertung.
Und als Tipp, wenn du nach Zahlen oder Datum sortieren lassen willst dann MÜSSEN alle Einträge Zahlen oder Datum sein !!!
Wenn das nicht Garantiert ist, lass doch nach Text sortieren das geht eigentlich immer.
Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Listbox sortieren
12.08.2005 21:13:53
Tobias
Hi Heiko,
die Combobox ist ungebunden und wird nur durch VBA gefüllt.
Ich lasse nach Spalte 1 sortieren und nur nach Text. (Ist auch nur Test drin)
Verstehe die Fehlermeldung nicht so ganz.
Was ist denn die Klasse Control? Die finde ich nirgends. Ist ListBox von dem Typ?
Ich hab Office XP. kann das ein Versionsproblem sein?
Mfg,
DerTobi
Anzeige
AW: Listbox sortieren
12.08.2005 21:23:00
Tobias
HI Heiko,
ich hab deinen Code dahingehend geändert, dass ich nur in dem Kopf des Sub beim ersten Argument das "As Control" gelöscht habe.
Jetzt funktionierts einwandfrei...
Mfg,
DerTobi
AW: Listbox sortieren
13.08.2005 18:17:55
Heiko
Hallo Tobi,
da schätze ich mal, das deine Listbox nicht in einem Userform sondern in einem Tabellenblatt ist. Dann ist sie nämlich nicht vom Typ Control, sondern vom Typ OLEObject. Durch die nun fehlende Deklaration (as Control weggelassen) wird der richtige Typ von VBA zugewiesen, damit gibts dann auch keine Fehlermeldung.
Aber nun läuft es ja, dann mal fröhliches sortieren.
Gruß Heiko
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox in Excel sortieren


Schritt-für-Schritt-Anleitung

Um eine Listbox in Excel zu sortieren, kannst du das folgende VBA-Makro verwenden. Dieses Beispiel zeigt, wie du die Listbox nach der ersten Spalte lexikographisch sortieren kannst.

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf VBAProject (deineDatei.xlsx) > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub SortListBox()
    Dim iLast As Integer, iNext As Integer
    Dim iTmp
    With ListBox1
        For iLast = 0 To .ListCount - 1
            For iNext = iLast + 1 To .ListCount - 1
                If .List(iLast) > .List(iNext) Then
                    iTmp = .List(iLast)
                    .List(iLast) = .List(iNext)
                    .List(iNext) = iTmp
                End If
            Next iNext
        Next iLast
    End With
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus, um die Listbox zu sortieren. Du kannst dies über Entwicklertools > Makros und dann dein Makro auswählen.

Mit diesem VBA-Skript kannst du die Listbox sortieren, nachdem sie gefüllt wurde.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich: Dieser Fehler tritt auf, wenn du versuchst, unterschiedliche Datentypen zu vergleichen. Stelle sicher, dass alle Werte in der Spalte, nach der du sortierst, denselben Datentyp haben.

  • Gebundene vs. ungebundene Listbox: Beachte den Unterschied. Gebundene Listboxen sind mit einem Tabellenbereich verknüpft, während ungebundene Listboxen nur durch VBA gefüllt werden. Das Sortieren von gebundenen Listboxen ist nicht möglich; du musst den zugrunde liegenden Bereich sortieren.


Alternative Methoden

Es gibt verschiedene Ansätze, um eine Listbox in Excel zu sortieren. Eine Alternative ist die Verwendung eines Excel-Datenbereichs:

  1. Sortiere die Daten in einem Excel-Arbeitsblatt.
  2. Fülle die Listbox dann mit den bereits sortierten Daten.

Dies kann einfacher sein, wenn du regelmäßig die Daten aktualisieren und sortieren möchtest.


Praktische Beispiele

Hier ist ein weiteres Beispiel für ein VBA-Skript, das eine Listbox nach einer spezifischen Spalte sortiert:

Sub SortBox(cltBox As Control, intSpalten As Integer, intSpalte As Integer, Optional bytWie As Byte = 1)
    Dim intLast As Integer, intNext As Integer
    Dim strTmp As String
    With cltBox
        For intLast = 0 To .ListCount - 1
            For intNext = intLast + 1 To .ListCount - 1
                If .List(intLast, intSpalte - 1) > .List(intNext, intSpalte - 1) Then
                    For intCounter = 0 To intSpalten - 1
                        strTmp = .List(intLast, intCounter)
                        .List(intLast, intCounter) = .List(intNext, intCounter)
                        .List(intNext, intCounter) = strTmp
                    Next intCounter
                End If
            Next intNext
        Next intLast
    End With
End Sub

Du kannst diese Methode anpassen, um nach verschiedenen Spalten und Datentypen zu sortieren.


Tipps für Profis

  • Verwende die RowSource-Eigenschaft: Wenn du mit gebundenen Listboxen arbeitest, kann es hilfreich sein, die Datenquelle in Excel selbst zu sortieren, bevor du sie in die Listbox lädst.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme während der Sortierung zu vermeiden.

  • Optimierung: Überlege, ob du die Sort-Funktion von Excel verwenden kannst, um die Leistung bei großen Datenmengen zu verbessern.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen gebundenen und ungebundenen Listboxen?
Gebundene Listboxen sind mit einem Datenbereich verknüpft, während ungebundene Listboxen nur durch VBA gefüllt werden.

2. Wie kann ich sicherstellen, dass alle Werte in der Listbox korrekt sortiert werden?
Achte darauf, dass alle Werte in der Spalte, nach der du sortierst, denselben Datentyp haben. Wenn du nach Zahlen oder Datum sortierst, sollten alle Einträge entsprechende Werte enthalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige