Supportnet Computer
Planet of Tech

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

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:

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

Antwort 5 von piano

Sorry, aber das ist keine Sortierung, sondern eine etwas kuriose Reihung! kann dir nicht weiterhelfen.
Gruss
piano

Antwort 6 von piano

Hallo
hab doch noch eine Lösung:
zwischen
Zitat:
Next i1
und
Zitat:
Cells(i, 2).Value = Alfa
füge ein:

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


Antwort 9 von piano

Hallo
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ß

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

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

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