Sortieren mehrerer zusammenhängender Spalten

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Andersen.

    Sortieren mehrerer zusammenhängender Spalten

    Hallo in die Runde...
    ich habe eine (für mich) knifflige Frage an die Experten.

    Folgender Sachverhalt stellt sich mir dar. Ich habe eine Liste mit Zahlen und Namen und einem individuellen Feld. Jetzt soll (in einem vorgegebenen Rahmen) die Liste per VBA sortiert werden, und zwar einmal numerisch und einmal alphabetisch. Problematisch für mich ist hierbei, dass die zu sortierenden Spalten auf drei nebeneinanderliegende Bereiche (mit je 3 Spalten) verteilt ist, die so vorgegeben und nicht veränderbar sind. Deshalb "vorgegebener Rahmen"...!

    Ich habe einmal einen Anhang zur Veranschaulichung hochgeladen.

    Ein zu sortierender Bereich erstreckt sich also über drei Spalten [Zahl | Name | individuelles Feld]. Direkt daneben der nächste identische Bereich usw.
    Alle drei Bereiche sollen also MITEINANDER sortiert werden. Nach numerischer Sortierung würde also der Eintrag mit der Zahl 81 im zweiten Bereich landen und der Eintrag mit der Zahl 113 im Bereich 3.

    Wer kann mir hierbei helfen bzw. hat eine Idee zur Lösung?

    DANKE schon einmal im Voraus.
    Bilder
    • Unbenannt123.JPG

      102,79 kB, 645×580, 303 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andersen“ ()

    Du hast drei Gruppen, die eigentlich untereinander gehören.
    Das ist in Excel so grundsätzlich nicht vorgesehen.
    Ein Worksheet ist kein Buch im Spaltensatz.

    Wenn du das mit Bordmitteln Sortieren willst, musst du erst aus den drei Gruppen eine machen, die die Einträge untereinander haben.
    Wenn es dir gefällt, kannst du nach dem Sortieren die Daten wieder in drei Gruppen splitten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also ich würde Dir auch dazu raten "anständig" mit Excel zu arbeiten. Das macht langfristig garantiert keinen Spaß mit drei Tabellen auf einem Arbeitsblatt zu arbeiten, die noch dazu nebeneinander!! angeordnet sind. 8|

    Wie willst du die Tabellen aufgesplittet haben? Zeile 1-80 in der ersten, 81 bis 112 in der zweiten und ab 113 in der dritten? Wenn ja, dann sollte es mit folgendem Code funktionieren (direkt in das Arbeitsblatt einfügen, nicht als Modul):

    Visual Basic-Quellcode

    1. Sub TabellenSortieren()
    2. 'Tabelle2 unter Tabelle1 einfügen
    3. Range("D2:F" & Cells(Rows.Count, 4).End(xlUp).Row).Cut _
    4. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    5. 'Tabelle3 unter Tabelle1 und 2 einfügen
    6. Range("G2:I" & Cells(Rows.Count, 7).End(xlUp).Row).Cut _
    7. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    8. 'Zusammengefügte Tabellen aufsteigend sortieren
    9. ActiveSheet.Sort.SortFields.Add Key:=Range("A2"), _
    10. SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    11. With ActiveSheet.Sort
    12. .SetRange Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
    13. .Header = xlNo
    14. .Orientation = xlTopToBottom
    15. .Apply
    16. End With
    17. 'Tabellen anschließend wieder aufteilen
    18. Range("A81:C112").Cut _
    19. Range("D2") 'Ab Zeile 81 in die zweite Tabelle
    20. Range("A113:C" & Cells(Rows.Count, 1).End(xlUp).Row).Cut _
    21. Range("G2") 'Ab Zeile 113 in die dritte Tabelle
    22. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „cry.baby“ ()

    @ cry.Baby DANKE DANKE DANKE

    Wie müsste ich denn den Code umstellen, um alphabetisch nach Spalte "B" zu sortieren?
    Ach, und ich würde Excel NIE so mit drei Tabellen nebeneinander nutzen. Aber die Kollegen können sich leider nicht (mehr) umgewöhnen und nutzen das seit 20 Jahren schon so. muss ich erstmal akzeptieren...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andersen“ ()

    Update: Da fällt mir ein, dass wir den Code oben anpassen müssten, wenn Du die Tabellen entsprechen formatierst. Ansonsten kannst du es auch mit folgendem Code nach Spalte B sortieren:

    Visual Basic-Quellcode

    1. With Range("A2:C" & Cells(Rows.Count, 2).End(xlUp).Row)
    2. .Sort Key1:=Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row), Order1:=xlAscending, Header:=xlNo
    3. End With


    Also dadurch dass die "Tabellen" nicht als Tabellen formatiert sind, würde ich das in diesem Fall nachholen-> Bereich markieren und mit Strg+T formatieren. Anschließend kannst Du die Spalte B sortieren und den Vorgang mit dem Rekorder aufnehmen. Dadurch dass es jetzt eine Tabelle ist, wird alles schön dynamisch nach dem Header sortiert, also in diesem Fall nach [Name]. Dynamisch heißt in diesem Fall, dass Du das Ende der Spalte nicht mit einem Code ermitteln musst.

    Wenn Du nicht klar kommst, melde Dich nochmal.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „cry.baby“ ()

    ...hm..., ich hab jetzt ein wenig "herumprobiert" und irgendwie war es nicht erfolgversprechend.
    Meine Idee war, den von dir @cry.baby eingestellten Code so abzuändern, dass ich die Möglichkeit habe, einmal sowohl numerisch (Spalte A) als auch alphabetisch (Spalte B) zu sortieren. Abschließend soll dann wieder mittels Code auf drei Tabellen getrennt werden :-/
    Ich weiß, nicht die feine englische Art. aber was soll ich machen. Die Anforderung ist nun mal so....

    Update:
    Also, wenn ich jetzt den ersten Code von dir @cry.baby nutze, sortiert Excel nach Spalte "B", also alphabetisch. Dann müsste ich jetzt also den Code ändern, damit er nach Spalte "A" sortiert (numerisch).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andersen“ ()

    Zeile 11 bis 19 vom Code einfach mit dem Code in meinem vorletzten Posting ersetzen. Du kannst ja zwei ActiveX-Buttons für sortieren nach A und sortieren nach B in das Sheet einfügen.

    PS: Achtung, ich habe meinen vorletzten Beitrag editiert. Vllt hast Du noch die alte Version verwendet.
    Phänomen: wenn ich beide Schaltflächen setze und entsprechend das Makro zuordne, kann ich numerisch sortieren. Betätige ich dann die Schaltfläche, um alphabetisch zu sortieren, geht das auch problemlos. Aber danach ist KEINE numerische Sortierung mehr möglich ?????

    Visual Basic-Quellcode

    1. Sub TabellenSortierenNum()
    2. 'Tabelle2 unter Tabelle1 einfügen
    3. Range("D2:F" & Cells(Rows.Count, 4).End(xlUp).Row).Cut _
    4. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    5. 'Tabelle3 unter Tabelle1 und 2 einfügen
    6. Range("G2:I" & Cells(Rows.Count, 7).End(xlUp).Row).Cut _
    7. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    8. 'Zusammengefügte Tabellen aufsteigend sortieren
    9. ActiveSheet.Sort.SortFields.Add Key:=Range("A2"), _
    10. SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    11. With ActiveSheet.Sort
    12. .SetRange Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
    13. .Header = xlNo
    14. .Orientation = xlTopToBottom
    15. .Apply
    16. End With
    17. 'Tabellen anschließend wieder aufteilen
    18. Range("A81:C112").Cut _
    19. Range("D2") 'Ab Zeile 81 in die zweite Tabelle
    20. Range("A113:C" & Cells(Rows.Count, 1).End(xlUp).Row).Cut _
    21. Range("G2") 'Ab Zeile 113 in die dritte Tabelle
    22. End Sub
    23. Sub TabellenSortierenAlph()
    24. 'Tabelle2 unter Tabelle1 einfügen
    25. Range("D2:F" & Cells(Rows.Count, 4).End(xlUp).Row).Cut _
    26. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    27. 'Tabelle3 unter Tabelle1 und 2 einfügen
    28. Range("G2:I" & Cells(Rows.Count, 7).End(xlUp).Row).Cut _
    29. Range("A" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
    30. 'Zusammengefügte Tabellen aufsteigend sortieren
    31. With Range("A2:C" & Cells(Rows.Count, 2).End(xlUp).Row)
    32. .Sort Key1:=Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row), Order1:=xlAscending, Header:=xlNo
    33. End With
    34. 'Tabellen anschließend wieder aufteilen
    35. Range("A81:C112").Cut _
    36. Range("D2") 'Ab Zeile 81 in die zweite Tabelle
    37. Range("A113:C" & Cells(Rows.Count, 1).End(xlUp).Row).Cut _
    38. Range("G2") 'Ab Zeile 113 in die dritte Tabelle
    39. End Sub


    WAS BITTE MACH ICH DENN FALSCH 8|
    Strange. Ersetze mal im Sub TabellenSortierenNum die Sortierung mit dem Code aus der Sub mit der Sortierung nach Alphabet (natürlich mit Key1 für die Spalte A wie folgt):

    Visual Basic-Quellcode

    1. [b][/b]'Zusammengefügte Tabellen aufsteigend sortieren
    2. With Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
    3. .Sort Key1:=Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row), Order1:=xlAscending, Header:=xlNo
    4. End With