Supportnet / Forum / Tabellenkalkulation
alphanumerische Sortierung
Frage
Hallo,
Ich habe ein Sortierungsproblem in Excel. Es geht um eine Liste :
z.B.:
Willkürlich richtig sortiert
AA3 A1
A9 A9
A12 A12
B1 B1
B12 B3
B3 B12
AA1 AA1
A1 AA3
AB1 AB1
AB10 AB5
AB5 AB10
Weiter fortgeführt würde die „richtig sortiert“-Tabelle heißen
AB11, AB12,... , AZxy, BA1, BA2, ..., BZxy, CA, ...
(xy steht für beliebige Zahlen)
Da ich in Excel keine Möglichkeit gefunden habe, es in dieser Form sortieren zu lassen, wollte ich fragen, ob jemand von euch ein Makro weiß, das eine derartige Tabelle(wenn sie in Spalte A abgelegt ist) in diese oben genannten Reihenfolge bringt.
Antwort 1 von ChatAlligator
Hallo weekend,
warum markierst du nicht den Bereich bzw. die Spalten und wählst oben [Daten] [sortieren] ?
Dann werden sie doch alphanumerisch sortiert
Gruß CA
warum markierst du nicht den Bereich bzw. die Spalten und wählst oben [Daten] [sortieren] ?
Dann werden sie doch alphanumerisch sortiert
Gruß CA
Antwort 2 von weekend
ja, aber dann würden zum Beispiel die A12 vor der A9 kommen.
Antwort 3 von piano
Hallo
Dazu ein Makro. Die Spalten B und C werden als HilfsZellen verwendet in denen ich Alfa und Numerischen Anteil trenne:
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
- probieren geht über studieren -
Dazu ein Makro. Die Spalten B und C werden als HilfsZellen verwendet in denen ich Alfa und Numerischen Anteil trenne:
Sub SortAlfaUndZahl()
letztea = Range("A65536").End(xlUp).Row
For i = 1 To letztea
AktZelle = Cells(i, 1).Value
Alfa = ""
Zahl = ""
For i1 = 1 To Len(AktZelle)
Zeichen = Mid(AktZelle, i1, 1)
If Not IsNumeric(Zeichen) Then
Alfa = Alfa & Zeichen
Else
Zahl = Zahl & Zeichen
End If
Next i1
Cells(i, 2).Value = Alfa
Cells(i, 3).Value = Zahl
Next i
Range(Cells(1, 1), Cells(letztea, 3)).Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
- probieren geht über studieren -
Antwort 4 von weekend
Danke das funktioniert super, ABER leider wird es doch noch nicht ganz richtig sortiert. So wäre es mit beliebig gewählten Werten richtig sortiert:
A1; A9; A12; B1; B3; B12; AA1; AA3; AB1; AB5; AB10
A1; A9; A12; B1; B3; B12; AA1; AA3; AB1; AB5; AB10
Antwort 5 von piano
Sorry, aber das ist keine Sortierung, sondern eine etwas kuriose Reihung! kann dir nicht weiterhelfen.
Gruss
piano
Gruss
piano
Antwort 6 von piano
Hallo
hab doch noch eine Lösung:
zwischen
If Len(Alfa) = 1 Then
Alfa = " " & Alfa ´ 2 Leerzeichen
Else
If Len(Alfa) = 2 Then
Alfa = " " & Alfa ´ 1 Leerzeichen
End If
End If
Gruss
piano
hab doch noch eine Lösung:
zwischen
Zitat:
Next i1
und Next i1
Zitat:
Cells(i, 2).Value = Alfa
füge ein:Cells(i, 2).Value = Alfa
If Len(Alfa) = 1 Then
Alfa = " " & Alfa ´ 2 Leerzeichen
Else
If Len(Alfa) = 2 Then
Alfa = " " & Alfa ´ 1 Leerzeichen
End If
End If
Gruss
piano
Antwort 7 von weekend
Danke, aber das ist es leider immer noch nicht. Übrigens hat das ganze einen paraktischen Sinn:-);-). Es kommt bei der Pinbelegung von größeren Halbleitern (mit zum Beispiel 1700 Pins) zum Einsatz. Das Ziel ist es, dass erst die Werte kommen welche nur einen Buchstaben vorne dran haben, dann die mit zum Beispiel AB, AC, ...
Antwort 8 von piano
Hallo
Bei mir kommt genau das auch heraus (entsprechend Antwort 4)!
Überprüfe den Code und die Hilfstabelle in Spalte "B":
Vor den 1-stelligen Buchstaben sollten 2 Leerstellen und vor den 2-stelligen Buchstaben sollte 1 Leerstelle stehen.
Die Variante berücksichtigt bis zu 3 Buchstaben, man kann es aber auch gegebenfalls erweitern.
Hier nochmals der komlette Code:
Sub SortAlfaUndZahl()
letztea = Range("A65536").End(xlUp).Row
For i = 1 To letztea
AktZelle = Cells(i, 1).Value
Alfa = ""
Zahl = ""
For i1 = 1 To Len(AktZelle)
Zeichen = Mid(AktZelle, i1, 1)
If Not IsNumeric(Zeichen) Then
Alfa = Alfa & Zeichen
Else
Zahl = Zahl & Zeichen
End If
Next i1
If Len(Alfa) = 1 Then
Alfa = " " & Alfa
Else
If Len(Alfa) = 2 Then
Alfa = " " & Alfa
End If
End If
Cells(i, 2).Value = Alfa
Cells(i, 3).Value = Zahl
Next i
Range(Cells(1, 1), Cells(letztea, 3)).Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Bei mir kommt genau das auch heraus (entsprechend Antwort 4)!
Überprüfe den Code und die Hilfstabelle in Spalte "B":
Vor den 1-stelligen Buchstaben sollten 2 Leerstellen und vor den 2-stelligen Buchstaben sollte 1 Leerstelle stehen.
Die Variante berücksichtigt bis zu 3 Buchstaben, man kann es aber auch gegebenfalls erweitern.
Hier nochmals der komlette Code:
Sub SortAlfaUndZahl()
letztea = Range("A65536").End(xlUp).Row
For i = 1 To letztea
AktZelle = Cells(i, 1).Value
Alfa = ""
Zahl = ""
For i1 = 1 To Len(AktZelle)
Zeichen = Mid(AktZelle, i1, 1)
If Not IsNumeric(Zeichen) Then
Alfa = Alfa & Zeichen
Else
Zahl = Zahl & Zeichen
End If
Next i1
If Len(Alfa) = 1 Then
Alfa = " " & Alfa
Else
If Len(Alfa) = 2 Then
Alfa = " " & Alfa
End If
End If
Cells(i, 2).Value = Alfa
Cells(i, 3).Value = Zahl
Next i
Range(Cells(1, 1), Cells(letztea, 3)).Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Antwort 9 von piano
Hallo
noch was: das blöde Ding macht immer Leerzeichen weg!
also aufgepaß auf den Kommentar in Antwort 6 !!!!
noch was: das blöde Ding macht immer Leerzeichen weg!
also aufgepaß auf den Kommentar in Antwort 6 !!!!
Antwort 10 von weekend
Hey,
vielen Dank, hab jetzt noch n Leereichen eingefügt und jetzt funktioniert es. Hast mir viel Zeit erspart:-). Vielen dank und noch n schönes weekend:-):-);-)
gruß
vielen Dank, hab jetzt noch n Leereichen eingefügt und jetzt funktioniert es. Hast mir viel Zeit erspart:-). Vielen dank und noch n schönes weekend:-):-);-)
gruß
Antwort 11 von Flintstone
@weekend,
im Originalcode hatte Piano auch nur ein Leerzeichen eingeschlossen, obwohl er die Erläuterung 2 Leerzeichen hingeschrieben hatte. ;-)
Das ergänzende Leerzeichen würde ich allerdings hinter den Buchstaben stellen, nicht davor.
If Len(Alfa) = 1 Then
Alfa = Alfa & " "
Else
If Len(Alfa) = 2 Then
Alfa = Alfa
End If
End If
Gruß
Fred
im Originalcode hatte Piano auch nur ein Leerzeichen eingeschlossen, obwohl er die Erläuterung 2 Leerzeichen hingeschrieben hatte. ;-)
Das ergänzende Leerzeichen würde ich allerdings hinter den Buchstaben stellen, nicht davor.
If Len(Alfa) = 1 Then
Alfa = Alfa & " "
Else
If Len(Alfa) = 2 Then
Alfa = Alfa
End If
End If
Gruß
Fred
Antwort 12 von piano
hallo @weekend
sagte ich doch: die Leerstellen wurden von "Supportnet" - Editor entfernt!!!
siehe Antwort 9
ausserdem ist der Trick der Sortierung nur mit vorangestellten Leerzeichen erfolgreich
Gruss
piano
sagte ich doch: die Leerstellen wurden von "Supportnet" - Editor entfernt!!!
siehe Antwort 9
ausserdem ist der Trick der Sortierung nur mit vorangestellten Leerzeichen erfolgreich
Gruss
piano
Antwort 13 von weekend
vielen dank nochmal, hat alles funktioniert.
aber wisst ihr vielleicht auch noch n Trick, wie man Zellen überspringt, die sich in einer zu sortierenden Spalte befinden? Denn wenn man die Mitsortiert, fängt er nach jeder leeren Zelle mit dem Sortieren wieder von vorne an
aber wisst ihr vielleicht auch noch n Trick, wie man Zellen überspringt, die sich in einer zu sortierenden Spalte befinden? Denn wenn man die Mitsortiert, fängt er nach jeder leeren Zelle mit dem Sortieren wieder von vorne an

