Clever-Excel-Forum

Normale Version: Listbox sortieren wie Spalte im Blatt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe Experten von Excel,

in meinem Blatt stehen zeilenweise in einer Spalte diese Werte:
Diese Spalte hat das Format STANDARD. Aber auch wenn ich sie als TEXT definiere, ändert sich da nichts am Ergebnis.
7032
7033
7034
7047_3D
7047_5D
7047_15D
7050
7532
7532_3D
7532_8D
7532_10D
7542
7583
Wenn die Listbox diese Spalte einliest und anzeigt ist die Sortierreihenfolge eine andere, scheinbar nach Zeichenlänge und ASCII-Logik.....etc..
7032
7033
7034
7050
7532
7542
7583
7047_15D
7047_3D
7047_5D
7532_10D
7532_3D
7532_8D

Das ist leider nicht gewünscht.
Wie kann ich der Listbox sagen, dass die eingelesenen Spaltenwerte auch so in der Listbox stehen?
Wie redest du nun mit der Listbox ?
(11.10.2015, 16:17)maine-coon schrieb: [ -> ]Wenn die Listbox diese Spalte einliest und anzeigt ist die Sortierreihenfolge eine andere, scheinbar nach Zeichenlänge und ASCII-Logik.....etc..

Hallo Achim,

- Was ist das für eine ListBox genau und wo steht sie?
- Wie wird die Liste eingelesen?

Gruß Uwe
REM Über viele OptionButton, Comboboxen..etc..etc...TextBoxen werden die gewünschten Daten über den Spezialfilter gefiltert.
Code:
Worksheets("Tools").Range("A1:DS10000").AdvancedFilter Action:=xlFilterCopy, _
   CriteriaRange:=Worksheets("Auswahl").Range("A1:DS2"), CopytoRange:=Worksheets("Auswahl").Range("A3"), Unique:=False
Code:
REM Anschließend werden Daten aus dem Blatt "Auswahl" in die Listbox einlesen.
With Worksheets("Auswahl")
 ListBox1.RowSource = "Auswahl!" & .Range(.Cells(4, 1), .Cells(n + 3, 125)).Address
End With


Oje... Wichtiger Nachtrag:
Ich sehe gerade, dass die vom Spezialfilter ermittelten Daten im Blatt Auswahl exakt so wie in der Listbox sind.
Das heißt, es ist gar nicht die Listbox, die das falsch macht, sondern der Filter.
Hallo Achim,

dann probiere es mal so:

Code:
With Worksheets("Auswahl")
 With .Range(.Cells(4, 1), .Cells(n + 3, 125))
   .NumberFormat = "@"
   .TextToColumns Destination:=.Cells(1), _
     DataType:=xlFixedWidth, _
     FieldInfo:=Array(0, 2)
   ListBox1.RowSource = "Auswahl!" & .Address
 End With
End With

Gruß Uwe
Damit erhalte ich diesen Laufzeitfehler 1004.

Excel kann nur eine Spalte auf einmal konvertieren.
Der Bereich kann mehrere Zeilen hoch sein, darf jedoch nicht mehr als eine Spalte breit sein.
(11.10.2015, 17:21)maine-coon schrieb: [ -> ]Damit erhalte ich diesen Laufzeitfehler 1004.

Excel kann nur eine Spalte auf einmal konvertieren.
Der Bereich kann mehrere Zeilen hoch sein, darf jedoch nicht mehr als eine Spalte breit sein.

Hallo Achim,

das hatte ich doch ganz vergessen, es auf eine Spalte zu begrenzen:

Code:
With Worksheets("Auswahl")
 With .Range(.Cells(4, 1), .Cells(n + 3, 125))
   .Columns(1).NumberFormat = "@"
   .Columns(1).TextToColumns Destination:=.Cells(1, 1), _
     DataType:=xlFixedWidth, _
     FieldInfo:=Array(0, 2)
   ListBox1.RowSource = "Auswahl!" & .Address
 End With
End With

Gruß Uwe
Mensch Uwe, der Wahnsinn....Es funktioniert,
aber ich habe (fast) nichts verstanden.....
Und es wird jetzt noch etwas kribbeliger.

Also, die Listbox erhält nun aus dem Blatt "Auswahl" die Daten in der richtigen Reihenfolge sortiert.
Aber die Listbox hat ja mehr als nur diese eine Spalte.
Und ich habe einige OB (OptionButton) zum Sortieren VOR- und Rückwärts anderer Spalten in der Listbox.
Dadurch wird diese eingangs richtige Sortierung wieder zerstört.

Die Sortierungen mache ich hiermit:
Code:
Sub Sortieren()
   NoAction = True
   With Worksheets("Auswahl").Range("A4:DS10000")
       .Sort Key1:=.Range(Sort_A), Order1:=Richtung, Key2:=.Range(Sort_B) _
       , Order2:=xlAscending, Key3:=.Range(Sort_C), Order3:=xlAscending, Header:= _
       xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
       DataOption1:=xlSortTextAsNumbers, DataOption2:=xlSortNormal, DataOption3 _
       :=xlSortNormal
   End With
   NoAction = False
End Sub

Eigentlich müsste der von dir funktionierende Code in diese Sortierroutine mit drin sein.
Aber das geht so wohl nicht. Ich habe es zumindest nicht hinbekommen.
Hallo Achim,

mit DataOption1:=xlSortTextAsNumbers erreichst Du ja genau das, was Du nicht willst! Wink

Gruß Uwe
Jetzt bin ich wieder ganz am Anfang.

Also, ich habe deinen Code eingebaut.
Die Listbox wird dadurch korrekt eingelesen.
Soweit so gut.

Wenn ich nun in meiner Sortierroutine das
DataOption1:=xlSortTextAsNumbers
gegen
DataOption1:=xlSortNormal
ändere, dann ist alles beim alten.

Aber ich vermute, dass ich dich nicht richtig verstanden habe.
Seiten: 1 2