Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
256to260
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
256to260
256to260
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Listbox sortieren

Listbox sortieren
18.05.2003 17:03:50
Jens_Pu
Hallo Excelfreunde,

in einer Userform habe ich zwei Listboxen.
Jeweils durch Doppelclick wird der angeklickte Eintrag in die andere Listbox übertragen. Das klappt so weit auch.
Frage: Wie kann ich es anstellen, dass anschliessend die Listboxen automatisch neu alphabetisch sortiert werden?

Mein Code sieht so aus:



Option Explicit

Private Sub cmdOK_Click()
  Unload Me
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ListBox2.AddItem
  ListBox2.List(ListBox2.ListCount - 1, 0) = ListBox1.List(ListBox1.ListIndex, 0)
  ListBox2.List(ListBox2.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
  ListBox1.RemoveItem (ListBox1.ListIndex)
  
End Sub

Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ListBox1.AddItem
  ListBox1.List(ListBox1.ListCount - 1, 0) = ListBox2.List(ListBox2.ListIndex, 0)
  ListBox1.List(ListBox1.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
  ListBox2.RemoveItem (ListBox2.ListIndex)
  
End Sub

Private Sub UserForm_Initialize()
  Dim anzMitglieder As Integer
  Dim As Integer
  'Mitgliederanzahl ermitteln
  anzMitglieder = Sheets("Mitgliederliste").Range("A65536").End(xlUp).Row
  
  'Listbox1 und Listbox2 leeren
  ListBox1.Clear
  ListBox2.Clear
  
  'Listbox1-Eigenschaften festlegen
  With ListBox1
    .ColumnCount = 3
    .MultiSelect = fmMultiSelectSingle
  End With

  'Listbox2-Eigenschaften festlegen
  With ListBox2
    .ColumnCount = 3
    .MultiSelect = fmMultiSelectSingle
  End With

  'Listbox1 füllen
  For i = 0 To anzMitglieder - 1
    ListBox1.AddItem
    ListBox1.List(i, 0) = Sheets("Mitgliederliste").Range(Cells(i + 1, 2), Cells(i + 1, 2))
    ListBox1.List(i, 1) = Sheets("Mitgliederliste").Range(Cells(i + 1, 3), Cells(i + 1, 3))
    ListBox1.List(i, 2) = Sheets("Mitgliederliste").Range(Cells(i + 1, 4), Cells(i + 1, 4))
  Next
End Sub


     Code eingefügt mit Syntaxhighlighter 2.1

Gruss Jens

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Listbox sortieren
18.05.2003 17:46:02
wolf.w.radzinski

nimm doch einfach Quicksort




Re: Listbox sortieren
18.05.2003 17:49:13
wolf.w.radzinski

Nachtrag ... afaik wird alphabetisch sortiert (auch bei Zahlen!)

Re: Listbox sortieren (Codekorrektur)
18.05.2003 17:55:09
wolf.w.radzinski


da waren vorhin noch ein paar tote Variablen drin (die Funktion war ursprünglich als collection_quick_sort geschrieben worden) !



Re: Listbox sortieren (Codekorrektur)
18.05.2003 19:04:41
L.Vira

Hallo,
kann es sein, dass da nur die erste Spalte sortiert wird?
Gruß L.Vira

Re: Listbox sortieren
18.05.2003 19:14:29
L.Vira

Mir ist aufgefallen, dass die Listbox2 3 Spalten hat, aber nur zwei kopiert werden. Beim Zurückübertragen von LB2 zu LB1 gehts sicher durcheinander.
Das Einlesen über AddItem ist sehr uneffektiv, das geht per Datenfeld schneller und einfacher, Beispiel:

Private Sub UserForm_Initialize()
Dim anzMitglieder As Long, WS1 As Worksheet, DF As Variant
Set WS1 = Sheets("Mitgliederliste")
'Listbox1 füllen
DF = WS1.Range("B1:D" & anzMitglieder)
ListBox1.List() = DF
''........
End Sub

Der Code wird nur dann funktionieren, wenn das Blatt
Sheets("Mitgliederliste") gerade aktiv ist. Ansonsten so
referenzieren:
'Mitgliederanzahl ermitteln
anzMitglieder = 65536
If WS1.[A65536] = "" Then anzMitglieder = WS1.[A65536].End(xlUp).Row

Zum Sortieren am einfachsten die Liste einem Array übergeben,
dieses sortieren und dann die Liste wieder füllen.
Ich glaube der Code von W.W.R sortiert nur die erste Spalte.

Ich bin jetzt nicht an meinem PC, wenn du dich noch etwas gedulden kannst, poste ich dir später die Sortierung.


Anzeige
Re: Listbox sortieren (Codekorrektur)
18.05.2003 19:17:40
wolf.w.radzinski

Hallo

ja natürlich wird nur die erste bzw. eine Spalte sortiert ... ich hatte erst nach dem Posten gesehen, daß mehr als eine Spalte benutzt wird.

mögliche Lösung:

einfügen einer (versteckten?) Hilfsspalte
suchen bzw. sortieren dieser Hilfsspalte(n Einträge)
und beim eigentlichen "Tauschvorgang" in Quicksort vertauscht man nicht nur die Inhalte der Hilfsspalte, sondern auch alle übrigen Zellen der beiden Listboxzeilen.

Mit Hilfsspalte sollte dies keine gravierende Änderung des Codes ergeben.

Gruß -wr-


Re: Listbox sortieren (Codekorrektur)
18.05.2003 19:22:11
L.Vira

Hallo,
Na, da ziehe ich doch ein Array vor!
Gruß L.Vira

Anzeige
Re: Listbox sortieren (Nr.2)
18.05.2003 19:26:15
wolf.w.radzinski

so in etwa mit mehr als einer Spalte ... Spalte 0,1,2 enthält deine Daten Spalte 3 ist die Hilfsspalte nach der sortiert wird

(die Indizes bei k hab ich jetzt nicht getestet - ohne Gewähr)

es geht natürlich auch wie von L.Vira vorgeschalgen.





Re: Listbox sortieren (Codekorrektur)
18.05.2003 19:32:48
wolf.w.radzinski

Array? d.h.? Inhalte in ein Arbeitsblatt kopieren dort sortieren und zurückschreiben? BspCode?

Gruß -wr-

theoretisch
18.05.2003 19:36:39
wolf.w.radzinski

nicht getestet sollte es evtl auch ohne Hilfsspalte gehen ... probier mal

die zwei Spalten nacheinander zu sortieren ... zuerst die Vornamen und dann die Nachnamen (ungetestet)

Anzeige
imho
18.05.2003 20:21:31
wolf.w.radzinski

Haoo L.Vira,

imho funktioniert es auch OHNE Hilfsspalte vollkommen in der Listbox (auch ohne array) ... damit ... BITTE BEI GELEGENHEIT TESTEN (Rückmeldung erwünscht, da ich selbst noch nicht sehr viele Tests gefahren habe!)





Sorry, ich hatte Besuch
18.05.2003 22:03:05
Jens_Pu

Hallo Wolf, hallo L.Vira,

mit meiner Frage habe ich Euch ja ganz schön beschäftigt.
So auf die Schnelle kapier ich das aber nicht. Das muss ich mir morgen erst mal in Ruhe ansehen.
Trotzdem schon mal vielen Dank.
Ich melde mich auf jeden Fall wieder, entweder mit Erfolgsmeldung oder mit Nachfrage wenn ich es nicht kapier.

Gruss Jens

Anzeige
die Nr.2 funktioniert noch nicht
18.05.2003 22:39:32
wolf.w.radzinski

Hallo Jens u.a.

die Nr.2 funktioniert noch nicht korrekt, ich hab meine alte Collection-Quicksort jetzt so umgeschrieben, daß man nun beliebige Listboxinhalte alphabetisch sortieren kann (theoretisch sollte es funktionieren) :-) getestet hab ich es mit zwei Spalten und nach Nachname, Vorname bzw. Vorname,Nachname aufsteigend sortiert (die absteigende Quicksort hab ich noch nicht umgeschrieben sind ja auch nur ein paar ">" "<" Zeichen zu ändern ... und nicht viel mehr)

NACHFRAGE an L.Vira u.a. "Wie kann ich im Code das Paramarray EINFACHER REKURSIV aufrufen?"

Gruß -wr-

hier mein Code...



Anzeige
kleine Korrektur
19.05.2003 11:09:31
wolf.w.radzinski



Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige