Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• DeBabba
Registriert seit: 15.04.2014
Version(en): 2003 -2010
Hi Uwe, danke für den Tipp Hatte ich mir schon gedacht Ich hoffte auf eine andere Lösung Trotzdem vielen Dank für Deine Hilfe Schönes Wochenende Klaus
Registriert seit: 12.04.2014
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
|