Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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
Inhaltsverzeichnis

Benutzerdefiniertes Sortieren

Benutzerdefiniertes Sortieren
30.04.2020 11:00:44
Heinz
Ich habe folgendes Problem: Es liegt eine Stückliste mit alphanumerischen Positionen vor.
Diese sollte im Prinzip numerisch sortiert sein, also mit aufsteigendem Wert. Es kommen allerdings Postionen mit vorangestellter "0" vor. Diese sollten nach der Position eingetragen werden:
IST
10000
10000A
010002
0902
10001
10002
900
901
902
Sortierfolge
900
901
902
0902
10000
10000A
10001
10002
010002
Hat jemand eine Idee egal mit oder ohne VBA: alphanumerisches sortieren ist kein Problem, aber die "0" richtig einsortieren.
Danke

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nachgefragt ...
30.04.2020 11:57:17
neopa
Hallo Heinz,
... wie soll z.B. ein Wert 091 im Beispiel eingeordnet werden?
Gruß Werner
.. , - ...
AW: Benutzerdefiniertes Sortieren
30.04.2020 12:36:08
Heinz
091 wäre an erster Stelle wenn es keine Position 91 gibt. Falls 91 vorhanden ist sollte 091 hinter 91 kommen. Zur Info 0 bedeutet dass die Postion spiegelbildlich zum Original ist oder ob nachbearbeitet werden muss.
Gruß Heinz
AW: ok und wieviel verschiedene Index gibt es ...
30.04.2020 13:08:18
neopa
Hallo Heinz,
... mit Index meint ich das nach geführte "A" in 10000A.
Eine Standardlösung sehe ich nämlich momentan nicht. Bleibt eine VBA-Lösung (aus solcher halte ich mich jedoch gänzlich heraus) oder eine PowerQuery-Lösung. Bei letzterer stecke ich noch in den Kinderschuhen, meine jedoch , dass es damit auch mir möglich sein könnte, wenn es nur das das "A" als Anhang gibt.
Gruß Werner
.. , - ...
Anzeige
AW: Benutzerdefiniertes Sortieren
30.04.2020 12:56:55
Daniel
Hi
Damit wunschgemäß sortiert wird, musst du die Texte in Zahlen wandeln. (Z.B. mit der Funktion WERT oder durch Multiplikation mit 1)
Aber du hast Daten drin, die Buchstaben enthalten und sich daher nicht in Zahlen wandeln lassen.
Du müsstest also in einer zusätzlichen Spalte per Formel die Zahlenwerte von den Buchstaben trennen und dann nach dieser Hilfsspalte sortieren.
Dazu kannst du eine der Formeln verwenden, die hier beschrieben sind:
https://www.herber.de/excelformeln/pages/Zahl_von_Text_trennen.html
Gruß Daniel
Anzeige
AW: Benutzerdefiniertes Sortieren
30.04.2020 15:33:45
Heinz
Danke Daniel,
das nützt leider nichts.
Numerische Sortierung habe ich mit VBA hinbekommen. Allerdings werden die Daten mit vorgestellter Null nicht in der korrekten Reihenfolge einsortiert. Die Werte welche mit 0 beginnen, werden vor dem Wert und nicht hinter dem Wert einsortiert.
0902
902
statt
902
0902
Gruß Heinz
AW: Benutzerdefiniertes Sortieren
30.04.2020 16:02:28
Daniel
Deswegen musst du die Texte in einer Hilfsspalte in echte Zahlen wandeln.
Dann verschwinden die führenden Nullen und die Zahlen werden entsprechend ihres Wertes sortiert und nicht nur nach der Rangfolge des ersten unterschiedlichen Zeichens wie bei Texten.
Gruß Daniel
Anzeige
AW: Benutzerdefiniertes Sortieren
01.05.2020 13:44:10
Heinz
Das habe ich ja gemacht.(siehe hochgeladene Mappe). Sortiert wird soweit richtig, das habe ich mit VBA gelöst. Das Ergebnis hat nur immer noch den Fehler, dass Paare mit 0 und gleicher Nummer in der falschen Reihenfolge stehen. Ich habe sonst keine Idee, als anschließend mit einer Schleife drüber zu fahren und die Werte dann vertauschen.
AW: Benutzerdefiniertes Sortieren
01.05.2020 21:10:48
fcs
Hallo Heinz,
du benötigst eine weitere Hilfsspalte, die die Nullen kennzeichnet mit Wert = 0 wenn 1. Ziffer keine 0 und =1 wenn 1. Ziffer gleich Null ist.
Hier dein Makro angepasst.
LG
Franz

Sub sort_Neu()
Dim rng As Range
Dim wks As Worksheet
Dim arrTemp
Set wks = ActiveWorkbook.Worksheets("x")
With wks
Sheets("x").Select
Application.ScreenUpdating = False
'3 Hilfs-Spalten einfügen
.Range("B:D").Insert
.Range("B:C").NumberFormat = "0"
.Range("D:D").NumberFormat = "@"
For Each rng In .Range("A1").CurrentRegion.Cells
With rng
.Offset(0, 1) = Val(.Value)
.Offset(0, 2) = IIf(Left(.Text, 1) = 0, 1, 0)
.Offset(0, 3) = Right(.Value, Len(.Value) - _
Len(.Offset(0, 1).Value) - .Offset(0, 2))
End With
Next rng
.Range("A1").CurrentRegion.EntireRow.Sort _
Key1:=.Range("B1"), Order1:=xlAscending, _
Key2:=.Range("D1"), Order2:=xlAscending, _
Key3:=.Range("C1"), Order3:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom 'Header ggf. auf xlYes bzw.xlNo setzen wenn _
Titelzeile vorhanden bzw. nicht. Excel nicht raten lassen
'Hilfsspalten wieder löschen
.Columns("B:D").Delete
Application.ScreenUpdating = True
End With
End Sub

Anzeige
Benutzerdefiniertes Sortieren per Fml o.Hilfszelle
02.05.2020 03:10:07
Luc:?
Morhn, Heinz;
im Prinzip ist das auch mit Fmln nicht allzu schwer, die Positionsnrn müssen nur sortierfähig umgeformt wdn, am besten zu DezimalZahlen, dann ist auch die Anwendung einer nach Größe listenden Xl-Fkt möglich. Irgendwelche zusätzlichen Hilfszellen sind dann ebenfalls nicht erforderlich (nur eine Sortierungsfml-Spalte).
Geht man von folgendem schematischen Aufbau einer Positionsnr aus, wäre sie so zu transformieren:
Präfix (fehlt oder 0) + eigentl_PosNr (Ziffern variierender Anzahl, 1.Ziffer≥1) + Suffix (1 Buchstabe)
Als Bsp gezeigt wurden 3 der 4 möglichen Kombinationen: Pn, Px+Pn, Pn+Sx
Vorstellbar wäre aber auch die Kombination Px+Pn+Sx. Da die Lösung ohnehin zwischen Px u.Sx unterscheiden muss, kann sie auch so gewählt wdn, dass dieser Fall ebenfalls abgedeckt ist. Und das sieht so aus: Pn + 2^(Px_exist)/1000=0,001|0,002 + (ASCII(Sx)-ASCII(@))/100 (zB: A→65-64⇒1/100⇒0,01)
Nach der Sortierung wdn die DezimalWerte wieder rückgewandelt, so dass eigentlich 2 Fmln anfallen. Dabei ist es am günstigsten, die Umwandlungs- und SortierFml als benannte Fml zu definieren, was den zusätzlichen Vorteil hat, dass die ihren Namen verwendende Rückwandlungszellfml nicht zur singularen MatrixFml wird, sondern eine normale ZellFml ist. Sie sähe dann so aus:
D22[:D36]:=WECHSELN(WENN(ISTGERADE(SortBasis*1000);"0";"")&GANZZAHL(SortBasis)&ZEICHEN(REST(TEXT(SortBasis;"0,00")*100;100)+64);"@";"")
Die benannte Fml wäre wie folgt zu definieren:
SortBasis:=KKLEINSTE(WENNFEHLER(--$A$22:$A$36;LINKS($A$22:$A$36;LÄNGE($A$22:$A$36)-1)+(CODE(RECHTS($A$22:$A$36))-64)%)+2^(LINKS($A$22:$A$36)="0")/1000;ZEILE(D1))
Um ihre Möglichkeiten zu testen, habe ich den Testdaten 6 weitere Positionsnrn hinzugefügt, so dass sie so aussehen:
A22:A36:{"IST";10000;"10000A";"010002";"0902";10001;10002;900;901;902;"010000A";"0901";"010000B";"902A";"0902A";"10000B"}
Dadurch müsste sich das vorgetragene Soll wie nachfolgend verschieben:
{"Sortierfolge";900;901;"";902;"0902";"";"";10000;"10000A";"";"";"";10001;10002;"010002"}
Und das Ergebnis der beiden kombinierten Fmln sieht dann so aus:
{"ERG";"900";"901";"0901";"902";"0902";"902A";"0902A";"10000";"10000A";"010000A";"10000B";"010000B";"10001";"10002";"010002"}
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Benutzerdefiniertes Sortieren per Fml o.Hilfszelle
02.05.2020 13:13:52
Heinz
Vielen Danke euch allen.
Da hätte ich noch eine Kiste Bier gebraucht, um drauf zu kommen.
LG Heinz
Bitte sehr! So, so, Bier hilft?! Wirklich...? ;-]
02.05.2020 18:41:47
Luc:?
Gruß, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige