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

Forumthread: UserForm: ComboBox-Inhalte alphabetisch sortieren

UserForm: ComboBox-Inhalte alphabetisch sortieren
16.11.2004 19:35:24
Martin
Hallo,
ich habe ein kleines Problem: Ich habe in einer UserForm einer Combobox über RowSource etwa 2000 Einträge zugewiesen. Diese Inhalte sind (wie im Tabellenblatt) nicht sortiert und können sich mehrfach wiederholen.
Meine Frage: Ist es möglich die Combobox-Inhalte alphabetisch zu sortieren und vielleicht sogar die doppelten Einträge zu entfernen?
Habe das Sortieren schon mit folgendem Makro aus dem Archiv probiert, ging aber leider nicht:

Private Sub UserForm_Activate()
ComboBox3.RowSource = "c1:c2000"
Dim iLast As Integer, iNext As Integer
Dim iTmp As Integer
With UserForm1.ComboBox3
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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm: ComboBox-Inhalte alphabetisch sortie
16.11.2004 19:43:05
Josef
Hallo Martin!
Wenn du eine ComboBox über .RowSource füllst, kannst du
die Liste nicht sortieren!
Am einfachsten und schnellsten wäre es die Daten in der Tabelle zu
sortieren und zu filtern und diese daten dan der ComboBox zuzuweisen.
Das kann man auch per Makro machen!
Gruß Sepp
Anzeige
Geht ich leider nicht
16.11.2004 20:12:38
Martin
Hallo,
vielen Dank für die Antwort! Leider kann ich die Daten nicht sortieren, da die Daten bereits nach einem anderen Kriterium sortiert sind und eine andere ListBox und eine andere ComboBox schon darauf zugreifen!
Geht leider nicht
16.11.2004 20:13:05
Martin
Hallo,
vielen Dank für die Antwort! Leider kann ich die Daten nicht sortieren, da die Daten bereits nach einem anderen Kriterium sortiert sind und eine andere ListBox und eine andere ComboBox schon darauf zugreifen!
Anzeige
AW: Geht leider nicht
16.11.2004 20:16:51
Josef
Hallo Martin
Geht schon!
Man braucht die Daten ja nicht im Original-Sheet zu sortieren und zu filtern.
Probier mal das.

Private Sub UserForm_Initialize()
Dim wksTemp As Worksheet
Dim myList As Variant
Dim lEnd As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
ActiveSheet.Range("C:C").Copy
Set wksTemp = Worksheets.Add
With wksTemp
.Paste
.Columns("A:A").Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range( _
"B1"), Unique:=True
myList = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
.Delete
End With
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
End With
ComboBox1.List = myList
ComboBox1.ListIndex = 0
End Sub

Gruß Sepp
Anzeige
AW: UserForm: ComboBox-Inhalte alphabetisch sortie
EtoPHG
Hallo Martin,
Die folgende Subroutine füllt eine Combobox sortiert (mit String Gross- und kleischreibung sowie Zahlen) ab. Du musst nur die ixCol, ixRowS und ixRowE Variablen gemäss Deinem Bereich aus dem Tabellenblatt richtig setzen.

Private Sub UserForm_Initialize()
Dim ixCol As Integer
Dim ixRow As Long
Dim ixRowS As Long
Dim ixRowE As Long
Dim ixList As Integer
ixList = 0
ixCol = 3                 ' Column of ListRange (e.g. C = 3)
ixRowS = 2                ' RowStart of ListRange
ixRowE = 2000             ' RowEnd of ListRange
ComboBox3.Clear
ComboBox3.AddItem ActiveSheet.Cells(ixRowS, ixCol).Value
For ixRow = ixRowS + 1 To ixRowE
If Not IsEmpty(ActiveSheet.Cells(ixRow, ixCol).Value) Then
For ixList = 0 To ComboBox3.ListCount - 1
If UCase(ComboBox3.List(ixList)) = UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then Exit For
If UCase(ComboBox3.List(ixList)) > UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then
ComboBox3.AddItem ActiveSheet.Cells(ixRow, ixCol).Value, ixList
Exit For
End If
Next ixList
If ixList = ComboBox3.ListCount Then
If UCase(ComboBox3.List(ixList - 1)) < UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then ComboBox3.AddItem ActiveSheet.Cells(ixRow, ixCol).Value
End If
End If
Next ixRow
End Sub

Gruss Hansueli
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

ComboBox-Inhalte in UserForms alphabetisch sortieren


Schritt-für-Schritt-Anleitung

Um die Inhalte einer ComboBox in einer UserForm alphabetisch zu sortieren, kannst du folgende Schritte befolgen:

  1. Erstelle eine UserForm und füge eine ComboBox hinzu.
  2. Füge den folgenden VBA-Code in den Codebereich deiner UserForm ein:
Private Sub UserForm_Initialize()
    Dim ixCol As Integer
    Dim ixRow As Long
    Dim ixRowS As Long
    Dim ixRowE As Long
    Dim ixList As Integer
    ixList = 0
    ixCol = 3                 ' Spalte des Listenbereichs (z.B. C = 3)
    ixRowS = 2                ' Startzeile des Listenbereichs
    ixRowE = 2000             ' Endzeile des Listenbereichs
    ComboBox3.Clear
    ComboBox3.AddItem ActiveSheet.Cells(ixRowS, ixCol).Value
    For ixRow = ixRowS + 1 To ixRowE
        If Not IsEmpty(ActiveSheet.Cells(ixRow, ixCol).Value) Then
            For ixList = 0 To ComboBox3.ListCount - 1
                If UCase(ComboBox3.List(ixList)) = UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then Exit For
                If UCase(ComboBox3.List(ixList)) > UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then
                    ComboBox3.AddItem ActiveSheet.Cells(ixRow, ixCol).Value, ixList
                    Exit For
                End If
            Next ixList
            If ixList = ComboBox3.ListCount Then
                If UCase(ComboBox3.List(ixList - 1)) < UCase(ActiveSheet.Cells(ixRow, ixCol).Value) Then ComboBox3.AddItem ActiveSheet.Cells(ixRow, ixCol).Value
            End If
        End If
    Next ixRow
End Sub
  1. Passe die Variablen ixCol, ixRowS und ixRowE entsprechend deinem Datenbereich an.
  2. Starte die UserForm, um die alphabetisch sortierten Inhalte in der ComboBox anzuzeigen.

Häufige Fehler und Lösungen

  1. Fehler: Die Liste wird nicht alphabetisch sortiert.

    • Lösung: Stelle sicher, dass die Variable RowSource nicht verwendet wird, da dies die Sortierung beeinflusst. Nutze stattdessen den obigen Code, um die Werte direkt hinzuzufügen.
  2. Fehler: Doppelte Einträge werden angezeigt.

    • Lösung: Der oben angegebene Code filtert bereits doppelte Einträge. Achte darauf, dass die Spalte keine leeren Zellen enthält.

Alternative Methoden

Wenn du die Daten nicht im Original-Sheet sortieren möchtest, kannst du auch eine temporäre Tabelle verwenden. Hier ist ein Beispiel:

Private Sub UserForm_Initialize()
    Dim wksTemp As Worksheet
    Dim myList As Variant
    Dim lEnd As Long

    ' Temporäres Arbeitsblatt erstellen
    Set wksTemp = Worksheets.Add
    ActiveSheet.Range("C:C").Copy wksTemp.Range("A1")

    ' Daten sortieren und filtern
    wksTemp.Columns("A:A").Sort Key1:=wksTemp.Range("A1"), Order1:=xlAscending, Header:=xlYes
    wksTemp.Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=wksTemp.Range("B1"), Unique:=True

    ' Liste in ComboBox einfügen
    myList = wksTemp.Range("B1:B" & wksTemp.Cells(Rows.Count, 2).End(xlUp).Row)
    ComboBox1.List = myList
    ComboBox1.ListIndex = 0

    ' Temporäres Blatt löschen
    Application.DisplayAlerts = False
    wksTemp.Delete
    Application.DisplayAlerts = True
End Sub

Praktische Beispiele

Um zu demonstrieren, wie du eine Excel Dropdown-Liste alphabetisch sortieren kannst, verwende eine Tabelle mit Namen in Spalte C. Mit dem oben angegebenen VBA-Code wirst du in der Lage sein, die Namen in der ComboBox alphabetisch anzuzeigen, ohne die Originaldaten zu verändern.


Tipps für Profis

  • Nutze UCase für die Groß-/Kleinschreibung, um sicherzustellen, dass die Sortierung nicht von der Schreibweise beeinflusst wird.
  • Wenn du eine alphanumerische Sortierung benötigst, passe die Vergleichslogik im Code entsprechend an.
  • Teste den Code mit verschiedenen Datensätzen, um sicherzustellen, dass er auch mit großen Datenmengen effizient arbeitet.

FAQ: Häufige Fragen

1. Wie kann ich die ComboBox automatisch aktualisieren? Um die ComboBox bei Änderungen im Datenbereich automatisch zu aktualisieren, kannst du das Worksheet_Change-Ereignis verwenden.

2. Kann ich die ComboBox auch nach Zahlen sortieren? Ja, die gleiche Logik kann für numerische Werte verwendet werden. Stelle sicher, dass du die Werte als Zahlen behandelst, nicht als Strings.

3. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in den meisten Office-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass die Syntax korrekt ist für die von dir verwendete Excel-Version.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige