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

Listbox Einträge alphabetisch sortieren Umlaute

Listbox Einträge alphabetisch sortieren Umlaute
17.11.2015 13:50:59
Tom
Hallo,
mit folgendem Code sortiere ich die Einträge einer Listbox alphabetisch:

Private Sub UserForm_Initialize()
With ListBox1
lngLetzteZeile = Sheets("Startland_temp").Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lngLetzteZeile
For i = 1 To lngLetzteZeile
.AddItem Worksheets("möp").Range("A" & i).Value
Next i
End With
SortListBox ListBox1
ListBox1.ListIndex = 0
End Sub

Private Sub SortListBox(ByRef LB As MSForms.ListBox)
Dim First As Integer
Dim Last As Integer
Dim NumItems As Integer
Dim i As Integer
Dim j As Integer
Dim Temp As String
Dim TempArray() As Variant
ReDim TempArray(LB.ListCount)
First = LBound(TempArray)
Last = UBound(TempArray) - 1
For i = First To Last
TempArray(i) = LB.List(i)
Next i
For i = First To Last
For j = i + 1 To Last
If TempArray(i) > TempArray(j) Then
Temp = TempArray(j)
TempArray(j) = TempArray(i)
TempArray(i) = Temp
End If
Next j
Next i
LB.Clear
For i = First To Last
LB.AddItem TempArray(i)
Next i
End Sub

Die alphabetische Sortierung funktioniert, allerdings werden die Einträge, die mit einem Umlaut beginnen, am Ende der Liste einsortiert (nach Z).
Gibt es eine Möglichkeit, dass Umlaute nicht am Ende erscheinen, sondern z.B. Ä vor B?
Vielen Dank schon mal für eure Tipps!
Grüße
Tom

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox Einträge alphabetisch sortieren
17.11.2015 14:05:52
Peter
Hallo Tom,
Beim Sortieren lässt sich unter Sortierreihenfolge die benutzerdefinierte Reihenfolge auswählen.
Dort kannst du Dein eigenes Alphabet generieren.
Gruß Peter

AW: Listbox Einträge alphabetisch sortieren ÄÖÜ
17.11.2015 14:13:24
Daniel
Hi
Variante 1
schreibe dir eine Function, welche Ä durch Ae usw tauscht und verwende diese dann für den Vergleich:

Function UmlauteTauschen(byVal txt as string) as string
txt = replace(txt, "Ä", "Ae")
txt = Replace(txt, "Ö", "Oe")
txt = Replace(txt, "Ü", "Ue")
UmlauteTauschen = txt
End Function
und im Vergleich dann:
If UmlauteTauschen(TempArray(i)) > UmlauteTauschen(TempArray(j)) Then

Variante 2:
schreibe die Listboxliste in eine Exceltabelle, sortiere sie dort und lies sie dann wieder aus der Tabelle in die Listbox ein.
gruß Daniel

Anzeige
Verwende nicht >, sondern vbFkt 'StrComp' mit ...
17.11.2015 15:49:52
Luc:-?
…dem 3.Argument vbTextCompare, Tom!
Als Ergebnis erhält man -1, 0, 1, je nachdem, was man womit vglt und ob das Eine <, = oder > das/dem Andere/n ist.
Gruß, Luc :-?
Besser informiert mit …

oder ganz einfach so...
17.11.2015 17:55:49
Peter
Hallo Tom,
würde es nicht dieses Makro tun?
Private Sub UserForm_Initialize()
Dim ArLi   As Object   ' das Object der ArrayList
Dim vTemp  As Variant  ' ein temporärer Array zur Aufnahme der Tabellenblattdaten
Dim lIndx  As Long     ' For/Next Schleifen-Index - hier der Index zum obigen Array
Set ArLi = CreateObject("System.Collections.ArrayList") ' Verweis auf das Object setzen
With ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
vTemp = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
For lIndx = 1 To UBound(vTemp) ' Spalte A als temporären Array auswerten
If Not ArLi.contains(vTemp(lIndx, 1)) Then ArLi.Add vTemp(lIndx, 1) ' Unikate sammeln
Next lIndx
ArLi.Sort            ' sortieren
vTemp = ArLi.toArray ' in ein Array kopieren
With ListBox1
.List = vTemp
.ListIndex = -1
End With
End Sub

Gruß Peter

Anzeige
Option Compare Text
17.11.2015 19:02:10
Nepumuk
Hallo,
nach Option Explicit einfach Option Compare Text einfügen.
Gruß
Nepumuk

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige