Clever-Excel-Forum

Normale Version: ListBox sortieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

habe ein Projekt in Anfgriff genommen und bräuchte mal unterstützung.
Ich habe in meiner UserForm eine ListBox und möchte diese sortieren. Das habe ich noch hinbekommen.
Allerdings hat meine Ausgangstabelle eine Überschriftenzeile. Jetzt wird mir beim Sortieren immer alles ab der
2. Zeile sortiert und landet dann aber in der ersten Zeile und meine Überschrift ist weg. Zudem bin ich mir nicht sicher,
ob die zugehörigen Spalten in der Tabelle mitsortiert werden. Muß ich da vielleicht noch was ergänzen?


Mein Code zum Sortieren sieht wie folgt aus:


Private Sub UserForm_Activate()


Dim lZeile As Long ' For/Next Zeilen-Index
Dim lIndxA As Long ' For/Next Index - außen
Dim lIndxI As Long ' For/next Index - innen
Dim sTemp As String ' temporärer Zwischenspeicher

'
' ListBox zuvor löschen :
'
ListeMA.Clear
'
' ListBox mit Werten aus Spalte A füllen :
'
For lZeile = 2 To [A2].End(xlDown).Row
Me.ListeMA.AddItem Cells(lZeile, 1)
Next
'
' ListBox sortieren :
'
For lIndxA = 0 To Me.ListeMA.ListCount - 1
For lIndxI = 0 To lIndxA - 1
If Me.ListeMA.List(lIndxI) > Me.ListeMA.List(lIndxA) Then
sTemp = Me.ListeMA.List(lIndxI)
Me.ListeMA.List(lIndxI) = Me.ListeMA.List(lIndxA)
Me.ListeMA.List(lIndxA) = sTemp
End If
Next lIndxI
Next lIndxA


End Sub


Danke schon mal im voraus


Chris
Hallo nochmal,


ich muß mich berichtigen, wenn meine Liste sortiert wird, dann nicht ab der 2. Zeile. Meine Überschrift verschwindet, weil er sie mit "wegsortiert".

Also Problem, er darf erst ab 2. Zeile sortieren und ich müsste wissen was mir fehlt das er alle Spalten meines Tabellenblatts mitsortiert. Sonst passen meine Daten nicht mehr.



Gruß Chris
Hallo Chris,
Deine Tabelle wird natürlich nicht mit sortiert.
Grundsätzlich würde ich:
- mir die Daten aus Spalte 1 erst mal in ein zweidimensionales Feld schreiben, in die 2. Spalte kommt die Zeilennummer.
- dann das Feld nach 1. Spalte sortieren, dabei 2. Spalte natürlich mitnehmen
- dann in ListBoxMA übernehmen.
Wird dann in ListBoxMA etwas selektiert, hast Du die passende Zeilennummer gleich bei der Hand.
Der Code dazu wäre:
PHP-Code:
Option Explicit
Dim Feld
() As String
Private Sub ListeMA_Click()
  MsgBox "gewähltes Element steht in Zeile " Feld(Me.ListeMA.ListIndex 12)
End Sub

Private Sub UserForm_Activate()
Dim j As LongAnzahl As Long

Dim lZeile 
As Long ' For/Next Zeilen-Index
Dim lIndxA As Long ' 
For/Next Index außen
Dim lIndxI 
As Long ' For/next Index - innen
Dim sTemp As String ' 
temporärer Zwischenspeicher

  ReDim Feld
(1 To [A2].End(xlDown).Row 11 To 2)
  For lZeile 2 To UBound(Feld1) + 1
    Feld
(lZeile 11) = Cells(lZeile1)
    Feld(lZeile 12) = lZeile
  Next
  
For lIndxA 1 To UBound(Feld1'Feld sortieren
    For lIndxI = 1 To lIndxA - 1
      If Feld(lIndxI, 1) > Feld(lIndxA, 1) Then
        For j = 1 To 2
          sTemp = Feld(lIndxI, j)
          Feld(lIndxI, j) = Feld(lIndxA, j)
          Feld(lIndxA, j) = sTemp
        Next j
      End If
    Next lIndxI
  Next lIndxA
  ListeMA.List = Feld ' 
Feld in Listbox übernehmen

End Sub 
Code:
Private Sub Userform_Initialize()
   sheet1.cellls(1).currentregion.columns(1).sort sheet1.cells(1),,,,,,,-1
   Listbox1.List= sheet1.cellls(1).currentregion.columns(1).Value
End Sub

Schau mal: https://www.snb-vba.eu/VBA_Fill_combobox...ox_en.html
Kürzer und genialer als snb: Geht nicht! :18:
(04.12.2020, 16:47)AlterDresdner schrieb: [ -> ]Kürzer und genialer als snb: Geht nicht! :18:

Doch!
Wenn er statt
cellls(1)
cells(1)

schreiben würde.
:21: :19:
Hallo,

Danke schon mal. werde es am Wochenende mal probieren ob ich damit irgendwie was anfangen kann. Beschäftige mich erst seit 3-4 Wochen excel.
Aber das wird schon. Ich geb dann Rückmeldung obs Funktioniert.



Gruß Chris
Hallo zusammen,

habe jetzt eine funktionierende Lösung um meine eine ListBox zu sortieren, die aus einer einzigen Spalte besteht.
In einem anderen Pörojekt hat meine Listbob allerdings 9 Spalten und ich möchte nach 2. Spalte (Datrum) sortieren.
Kann ich da den Code etwas umbauen?

Dim lZeile As Long ' For/Next Zeilen-Index
Dim lIndxA As Long ' For/Next Index - außen
Dim lIndxI As Long ' For/next Index - innen
Dim sTemp As String ' temporärer Zwischenspeicher



For lIndxA = 0 To Me.ListeMA.ListCount - 1
For lIndxI = 0 To lIndxA - 1
If Me.ListeMA.List(lIndxI) > Me.ListeMA.List(lIndxA) Then
sTemp = Me.ListeMA.List(lIndxI)
Me.ListeMA.List(lIndxI) = Me.ListeMA.List(lIndxA)
Me.ListeMA.List(lIndxA) = sTemp
End If
Next lIndxI
Next lIndxA


Gruß Chris