Sortieren (Ex2003 VBA)
#1
Hallo zusammen,
ich muss für ne 2003er Anwendung im VBA ne Sortierung einbauen und scheitere hierbei käglich. Ich hoffe auf die Macht des Forums
Folgendes
Ich habe eine Liste mit folgenden Einträgen
19x500x2500
19x600x2500
21x500x3000
und mehr ..

Jetzt kommt ein neuer Eintrag 8x300x2000 hinzu.
wenn ich meinen Sortierungscode laufen lasse (wobei CC die Anzahl Zeilen und BB die Spalte ist)
Code:
Set Bereich = Range(Cells(1, BB), Cells(CC, BB))
    Bereich.Sort Key1:=Cells(2, BB), Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
so wird der neue Eintrag ans Ende gestellt. wo er doch am Anfang sein müsste

Mach ich was falsch oder was muss ich tun , damit das funzt

Vielen Dank schonmal..

Gruß
DeBabba
Top
#2
Hallo,

Text wird von vorn nach hinten bewertet, und da ist 1 eben kleiner als 8..
Schreibe statt 8x300x2000 z.B. 08x300x2000.
Mit den anderen Ebenen müsstest Du es genau so machen, also immer von
der längsten (größten) Ziffer ausgehen und kürzeren Ziffern entsprechend
viele Nullen voranstellen.

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • DeBabba
Top
#3
Hi Uwe,
danke für den Tipp
Hatte ich mir schon gedacht Sad
Ich hoffte auf eine andere Lösung

Trotzdem vielen Dank für Deine Hilfe
Schönes Wochenende
Klaus
Top
#4
Hallo Klaus,
Zitat:Ich hoffte auf eine andere Lösung

Wenn du den Ausdruck selbst nicht verändern willst, dann schlage ich folgenden Lösungsansatz vor:
- du übernimmst die Daten in ein Array, Spalte 1 unverändert und in Spalte 2 modifiziert, zB mit einer 0 vor der ersten allein stehenden Ziffer,
- das Array wird nach Spalte 2 aufsteigend sortiert
- danach werden die Daten in Spalte 1 des Array, sortiert aber äußerlich unverändert, in die Tabelle zurückgeschrieben.

Gruß
Aloys
Top
#5
Hallo Klaus,

der Vorschlag von Aloys ließe sich auch mit der Methode "Text in Spalten" realisieren.

Deine Maße stehen in Spalte A, Spalten B:D sollten leer sein:

Code:
Sub MaszeSortieren()
  With Application.Intersect(Cells(1, 1).CurrentRegion.EntireRow, Columns("A:D"))
    .Columns(1).TextToColumns Destination:=.Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="x", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1))
    .Sort Key1:=.Range("B1"), Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    .Columns("B:D") = ""
  End With
End Sub

Gruß Uwe
Top
#6
Hallo Aloys,
Hallo UWe
sorry, habs erst heute gelesen.
Danke danke.
Das ist ne tolle Idee
Ich hatte schon darüber nachgedacht die 3 Zahlen Bereiche zu trennen
Ursprung wäre 8x100x2000 hier dann 3 Spalten mit der jeweiligen Zahl, dann numerisch sortieren und wieder zusammenbauen.
Hatte aber noch keine Zeit das mal umzusetzen
Ich probier das mal aus und melde mich wieder
Nochmal vielen vielen Dank für eure Idee

Gruß
KLaus
Top
#7
Hallo Alois,
hallo uwe
nochmals Danke für eure Tipps und Anregungen.
Ich hab das Ganze über die Befehle Split und Join gelöst
Hier mal ein AUszug
Code:
Sub Schblitt()
Dim A, SP, C
For A = 2 To Cells(1, 1).End(xlDown).Row
    Cells(A, 1).Select
    B = Cells(A, 1)
    SP = Split(B, "x", , vbTextCompare)
    If SP(0) < 10 Then SP(0) = "0" & SP(0)
    If SP(1) < 10 Then SP(1) = "0" & SP(1)
    Cells(A, 1) = Join(SP, "x")
Next
' Dann sortierung
' und dann die führende 0 wieder wegmachen
End Sub
Nochmals Danke
Gruß
Klaus
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste