Tabelle sortieren nach mehreren Spalten

Hallo,
brauche mal wieder etwas Hilfe.
Ich sortiere im Moment eine Tabelle nach der Spalte I = Endergebnis.
Wenn in Spalte I der Wert gleich ist, soll nach Spalte H sortiert werden, ist auch dieser Wert gleich, nach Spalte G, dann Spalte F,
und zuletzt Spalte E. Ist etwas zu schwierig für mich.
Für Hilfe bedanke ich mich im voraus.
Gruß Skaletti!

Der jetzige Sortiercode und die Tabelle:

http://www.hostarea.de/server-06/Juni-d27c7fa37e.xls

Private Sub Worksheet\_Change(ByVal Target As Range)

Worksheets("LG frei Jugend Einzel").Range("C3:J52").Sort Key1:=Range("I3"), \_
Order1:=xlDescending, Key2:=Range("J3"), Order2:=xlDescending, \_
Orientation:=xlTopToBottom

End Sub

Grüezi Dkletti

Ich sortiere im Moment eine Tabelle nach der Spalte I =
Endergebnis.

…dein Code unten sortiert aber auch nach Spalte J - wozu dient das?

Wenn in Spalte I der Wert gleich ist, soll nach Spalte H
sortiert werden, ist auch dieser Wert gleich, nach Spalte G,
dann Spalte F,
und zuletzt Spalte E. Ist etwas zu schwierig für mich.

Der jetzige Sortiercode und die Tabelle:

http://www.hostarea.de/server-06/Juni-d27c7fa37e.xls

Wo in der Mappe ist denn der Code zu finden und warum heisst das Tabellenblatt in der Mappe anders als es im Code bezeichnet wird?

Bitte beiteite doch deine Muster-Mappen etwas sorgfältiger auf, das erleichtet es ungemein, dir zu helfen.

Nimm die folgenden Zeilen, die den Sortiervorgang zweimal durchführen zuerst nach den unwichtigen Kriterien und dann nach den wichtigen:

Private Sub Worksheet\_Change(ByVal Target As Range)
With Me.Range("C3:J52")
 .Sort Key1:=Range("E3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("F3"), \_
 Order2:=xlDescending, \_
 Orientation:=xlTopToBottom
 .Sort Key1:=Range("I3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("H3"), \_
 Order2:=xlDescending, \_
 Key3:=Range("G3"), \_
 Order3:=xlDescending, \_
 Orientation:=xlTopToBottom
End With
End Sub


Mit freundlichen Grüssen

Thomas Ramel
- MVP für MS-Excel -

Hallo Thomas,

Danke für deine schnelle Antwort.
Sorry, in der Spalte J sind die Startnummern versteckt, die in der
Gesamten Anwendung zum finden der Starter gebraucht werden. Da die Tabellen als PP Presentarion laufen werden, sollen die Startnummern für den Betrachter unsichtbar sein. Habe ich am Anfang so gedacht und gelassen, mann hätte sie auch von der Folie runterlassen können.
Der Code steht im Modul des Tabellenblattes.
Das Tabellenblatt heisst „LG frei Jugend Einzel“, für den Anwender wichtig, der Betrachter braucht nur die Tabellenüberschrift.
Nochmals vielen Dank.
Werde deinen Code ausprobieren.
Erfolgsmeldung folgt.

Gruß Skaletti!

Hi Thomas,
Er sortiert, aber noch nicht ganz richtig.

Erstmal nur nach Endergebnis Spalte I sortieren, Spalten H,G,F,E ignorieren.

Wenn in Spalte I Endergebnis gleich ist, soll nach Spalte H sortiert werden, aber die Spalten E,F,G sollen dann ignoriert werden.

Spalte H auch gleicher Wert, nach Spalte G sortieren, Spalten E,F ignorieren.

Spalte G auch gleicher Wert, nach Spalte F Sortieren, Spalte E ignorieren.

Als letzte Möglichkeit, Spalte F gleicher Wert nach Spalte E sortieren.

Ich brauche also 5 Sortiermöglichkeiten die nacheinander greifen.

Ist etwas kompliziert.

Ich versuche mich erst seit 3 Monaten an VBA.
Wenn nur 3 Sortiermöglichkeiten gehen, könnte ich auch mit leben.
Wenn ich mal nicht weiter weiss Google ich schon mal, aber für diese Sache habe ich nichts gefunden.

Gruß Skaletti!

Grüezi Skaletti

Er sortiert, aber noch nicht ganz richtig.

Das kannst nur Du beurteilen, denn ich kenne deine Daten nicht…
Bitte sei spezifisch - schildere wie deine Daten aussehen, wie sie nach dem Sortiern mit obigem Code aussehen und wie sie deinem Wunsch gemäss aussehen sollten.

Erstmal nur nach Endergebnis Spalte I sortieren, Spalten
H,G,F,E ignorieren.

Wenn in Spalte I Endergebnis gleich ist, soll nach Spalte H
sortiert werden, aber die Spalten E,F,G sollen dann ignoriert
werden.

Spalte H auch gleicher Wert, nach Spalte G sortieren, Spalten
E,F ignorieren.

Spalte G auch gleicher Wert, nach Spalte F Sortieren, Spalte E
ignorieren.

Als letzte Möglichkeit, Spalte F gleicher Wert nach Spalte E
sortieren.

Ich brauche also 5 Sortiermöglichkeiten die nacheinander
greifen.

Nein; Du brauchst eine Sortierung welche die Daten nacheinander sortiert und zwar mit aufsteigender Wichtigkeit (die unwichtigste zuerst und die wichtigste zuletzt).

Das hätte eigentlich mein Code tun sollen, es kann aber sein, dass zu wenig Daten vorhanden waren um das Ergebnis auch ausgiebieg zu testen.

Dann muss ich mir halt selber eine Datenbasis zusammenstricken - einfacher wäre es, wenn deine bereits alle notwendigen Daten enthalten würde…


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,

Danke für deine Hilfe und Mühe.
Habe es doch mit deinem Code hinbekommen.

Gruß Skaletti!

Grüezi Skaletti

Danke für deine Hilfe und Mühe.
Habe es doch mit deinem Code hinbekommen.

Fein, das freut mich sehr! :smile:

Ich habe deine Datei dennoch mal runterladen können - vermutlich ist es nicht notwenig den Code so in *jedem* Tabellenblatt abzulegen sondern Du könntest ihn noch ein wenig modifizieren und dann in ‚Diese Arbeitsmappe‘ als globalen Code für die ganze Mappe ablegen. Das erleichtert dann auch die Pflege, wenn mal was ändern sollte.

Als kleine Pfüfung müsstest Du dann noch den Namen des Tabellenblattes prüfen und nur auf bestimmten (die beginnen ja immer mit denselben Buchstaben, wenn ich das auf die Schnelle richtig mitbekommen habe) die Sortierung durchführen lassen.

Wenns dich interessiert kann ich das mal versuchen - ich müsste halt wissen welche Tabellenblätter es betrifft.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi Thomas,
Vielen Dank für deine Hilfe und Unterstützung.
Habe nach mehrmaligen Testen doch festgestellt das der Code nicht
immer sofort richtig sortiert. Besonders wenn Spalte I,H,G gleiche
Werte haben, und nach Spalte F oder E Sortiert werden muss. Das Problem wird sein, da Exel beim sortieren nur 3 Spalten berücksichtigen kann.
Habe in meiner Firma unseren EDV-Experten angesprochen, der auch Exelexperte ist(wusste ich vorher noch nicht). Der sagte mir das man das nur mit einem Trick lösen könnte.
Dieser Trick ist bestimmt für viele interessant:frowning:wenn er funzt)

Du machst einfach in diesem Fall in Spalte L z.b. eine Formel, die so aus sieht für die erste Zeile, in diesem Fall Zeile 3:

=I3&"."&H3&"."&G3&"."&F3&"."&E3

Damit werden die Inhalte der anderen felder zusammen kopiert und folgendes kommt zb. herraus: „390.99.98.98.95“

Nun brauchst du einfach nur nach Splate L sortieren und schon sind alle in der richtigen Reihenfolge :wink:
der code sieht dann so aus:

Private Sub Worksheet_Change(ByVal Target As Range)

With Me.Range(„C3:L52“)
.Sort Key1:=Range(„L3“), _
Order1:=xlDescending, _
Orientation:=xlTopToBottom
End With

End Sub

Ich muss das aber erst noch ausprobieren.
Wenn das so funktioniert, werde ich das so anwenden.
Danke für deinen Vorschlag das in der Arbeitsmappe zentral für
die betreffenden Tabellenblätter zu regeln, aber dann müsste das
gleiche Problem bestehen bleiben. Es wären 22 Tabellenblätter gewesen,
fangen auch nicht alle mit den gleichen Bezeichnungen an.

Nochmals vielen Dank, werde mich im Forum melden, ob der Trick funzt.

Gruß Skaletti!

Hallo Thomas,

sortieren funzt so.

Gruß Skaletti!

Grüezi Skaletti

Vielen Dank für deine Hilfe und Unterstützung.
Habe nach mehrmaligen Testen doch festgestellt das der Code
nicht
immer sofort richtig sortiert. Besonders wenn Spalte I,H,G
gleiche
Werte haben, und nach Spalte F oder E Sortiert werden muss.
Das Problem wird sein, da Exel beim sortieren nur 3 Spalten
berücksichtigen kann.

Das kannst Du auch ohne Hilfsspalte problemlos mit VBA sortieren - wie gesagt immer über alle Spalten sortieren, die unwichtigste zuletzt.

Habe in meiner Firma unseren EDV-Experten angesprochen, der
auch Exelexperte ist(wusste ich vorher noch nicht). Der sagte
mir das man das nur mit einem Trick lösen könnte.
Dieser Trick ist bestimmt für viele interessant:frowning:wenn er
funzt)

Du machst einfach in diesem Fall in Spalte L z.b. eine Formel,
die so aus sieht für die erste Zeile, in diesem Fall Zeile 3:

=I3&"."&H3&"."&G3&"."&F3&"."&E3

Damit werden die Inhalte der anderen felder zusammen kopiert
und folgendes kommt zb. herraus: „390.99.98.98.95“

Nun brauchst du einfach nur nach Splate L sortieren und schon
sind alle in der richtigen Reihenfolge :wink:

…wenn Du meinst… :wink:

Was geschieht wenn Du unterschiedliche Stellenanzahl in den Spalten hast, also gemischt mal zwei mal dreistellige WErte?
Dann klappt die Textsortierung wie hier verwendet wieder nicht mehr.

Ich muss das aber erst noch ausprobieren.
Wenn das so funktioniert, werde ich das so anwenden.
Danke für deinen Vorschlag das in der Arbeitsmappe zentral für
die betreffenden Tabellenblätter zu regeln, aber dann müsste
das gleiche Problem bestehen bleiben. Es wären 22 Tabellenblätter
gewesen, fangen auch nicht alle mit den gleichen Bezeichnungen an.

Ich würde mich dennoch auf eine globale Lösung konzenterieren - die unterschiedlichen Namen sind nicht allzu komplex und das oben angesprochene Problem mit der Textsortierung ist dann auch nicht relevant.

Wie gesagt - ein wenig mehr Daten in der Demo-Mappe wären schon sinnvoll für einen schlüssigen Test…

Bitte melde dich, wenn das Ganze für dich dennoch von Interesse ist.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Skaletti

Ich habe mir deine Datei auch nochmals angesehen.

Vielen Dank für deine Hilfe und Unterstützung.
Habe nach mehrmaligen Testen doch festgestellt das der Code
nicht
immer sofort richtig sortiert. Besonders wenn Spalte I,H,G
gleiche
Werte haben, und nach Spalte F oder E Sortiert werden muss.
Das Problem wird sein, da Exel beim sortieren nur 3 Spalten
berücksichtigen kann.

Nein, das ist im Code berücksichtigt.

Das Problem sind deine Daten - ich sagte ja, ich hätte gerne eine Demo-Mappe mit den Original-Daten… :wink:

Deine Werte sind als Text in den Zellen, was das Sortieren dann verfälscht. (Versuche mal eine Summe aus deinen Werten zu ziehen - das wird scheitern).
Mein Code ist auf echte Zahlen ausgerichtet und funktioniert damit dann problemlos.

Passe daher deine Daten korrekt an, dann kannst Du auf Hilfsspalten verzichten und alles klappt hervorragend.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,
wir können das gerne probieren.

So würde eine Einzeltabelle aussehen.
http://www.hostarea.de/server-07/Juli-42bce02d4c.xls

Es fehlen nur die Startnummern in Spalte J (werden bei der Anmeldung der Sportler automatisch vergeben damit es keine doppelten gibt).
Aber danach soll ja nicht sortiert werden, die sollen nur beim sortieren mitgenommen werden, damit sie beim Namen bleiben (sehr wichtig!!!)

Tabellenblätter:
LG frei Schüler Einzel LG frei Jugend Einzel
LG frei Junioren Einzel LG frei Schützen A Einzel
LG frei Schützen B Einzel LG frei Damen Einzel
LG frei Altersklasse Einzel LG frei Seniorenklasse Einzel

LG aufg. Schüler Einzel LG aufg. Senioren Einzel
LG aufg. Senioren A Einzel LG aufg. Senioren B Einzel
LG aufg. Senioren C Einzel LG aufg. Seniorinnen Einzel
LG aufg. Seniorinnen A Einzel LG aufg. Seniorinnen B Einzel
LG aufg. Seniorinnen C Einzel

LP Jugend Einzel LP Junioren Einzel
LP Schützen Einzel LP Damen Einzel
LP Altersklasse Einzel

Grüezi Skaletti

So würde eine Einzeltabelle aussehen.
http://www.hostarea.de/server-07/Juli-42bce02d4c.xls

Es fehlen nur die Startnummern in Spalte J (werden bei der
Anmeldung der Sportler automatisch vergeben damit es keine
doppelten gibt).
Aber danach soll ja nicht sortiert werden, die sollen nur beim
sortieren mitgenommen werden, damit sie beim Namen bleiben
(sehr wichtig!!!)

OK, die nehmen wir dann gleich mit.

Tabellenblätter:
LG frei Schüler Einzel LG frei Jugend Einzel
LG frei Junioren Einzel LG frei Schützen A Einzel
LG frei Schützen B Einzel LG frei Damen Einzel
LG frei Altersklasse Einzel LG frei Seniorenklasse Einzel

LG aufg. Schüler Einzel LG aufg. Senioren Einzel
LG aufg. Senioren A Einzel LG aufg. Senioren B Einzel
LG aufg. Senioren C Einzel LG aufg. Seniorinnen Einzel
LG aufg. Seniorinnen A Einzel LG aufg. Seniorinnen B Einzel
LG aufg. Seniorinnen C Einzel

LP Jugend Einzel LP Junioren Einzel
LP Schützen Einzel LP Damen Einzel
LP Altersklasse Einzel

Ich habe nun alle Blätter berücksichtigt, die mit ‚LG‘ oder ‚LP‘ beginnen.

Die folgenden Zeilen gehören in ‚Diese Arbeitsmappe‘ und alle Sortier-Codes in den Einzelblättern müssen gelöscht (oder auskommentiert) werden.

Bei einer Änderung in einem der Blätter wird dieses nun sortiert.

Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Select Case Left(Sh.Name, 2)
 Case "LG", "LP"
 With Sh.Range("C3:J52")
 .Sort Key1:=Range("G3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("F3"), \_
 Order2:=xlDescending, \_
 Key3:=Range("E3"), \_
 Order3:=xlDescending, \_
 Header:=xlNo
 .Sort Key1:=Range("I3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("H3"), \_
 Order2:=xlDescending, \_
 Header:=xlNo
 End With

 End Select
End Sub

-- 
Mit freundlichen Grüssen

Thomas Ramel
- MVP für MS-Excel -

Hallo Thomas,
guten Morgen, war heute Nacht nach der Arbeit zu müde, und melde mich erst jetzt.
Habe jetzt kapiert was du vorhast. Leider geht das nicht ganz so.
Die Mannschaftstabellen (18 Stück) fangen genau so an, sehen aber ganz anders aus und werden nur nach dem Endergebnis sortiert, was kein Problem ist. (Beispiel: "LG frei Schützen Mannsch."usw.)
Geht das vieleicht mit der Endbezeichnung „Einzel“???
Warscheinlich nicht.
Falls es jetzt zu aufwendig wird, das Sortieren mit der Hilsspalte
funz perfekt, auch mit mehrstelligen Zahlen und Komma. Habe die Hilfsspalte ausgeblendet, sieht der Anwender gar nicht.
Interessiert bin ich allerdigs schon ob dein Vorschlag funzt.
Gruß Skaletti!

Grüezi Skaletti

guten Morgen, war heute Nacht nach der Arbeit zu müde, und
melde mich erst jetzt.

Das ist absolut kein Problem :smile:

Habe jetzt kapiert was du vorhast. Leider geht das nicht ganz
so.
Die Mannschaftstabellen (18 Stück) fangen genau so an, sehen
aber ganz anders aus und werden nur nach dem Endergebnis
sortiert, was kein Problem ist. (Beispiel: "LG frei Schützen
Mannsch."usw.)
Geht das vieleicht mit der Endbezeichnung „Einzel“???
Warscheinlich nicht.

Aber klar doch geht das - wir müssen bloss ein Merkmal finden, das allen Tabellenblättern eigen ist (und nur diesen), die sortiert werden sollen.

Interessiert bin ich allerdigs schon ob dein Vorschlag funzt.

Die folgenden Zeilen berücksichtigen nun ob ‚Einzel‘ im Namen des Tabellenblattes enthalten ist:

Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If IsNumeric(InStr(1, Sh.Name, "Einzel")) Then
 With Sh.Range("C3:J52")
 .Sort Key1:=Range("G3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("F3"), \_
 Order2:=xlDescending, \_
 Key3:=Range("E3"), \_
 Order3:=xlDescending, \_
 Header:=xlNo
 .Sort Key1:=Range("I3"), \_
 Order1:=xlDescending, \_
 Key2:=Range("H3"), \_
 Order2:=xlDescending, \_
 Header:=xlNo
 End With
End If
End Sub


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Thomas,

IsNumeric(InStr(1, Sh.Name, „Einzel“))

ist m.E. doch immer „Wahr“ egal wie der Blattname lautet.

Gruß
Reinhard

Grüezi Reinhard

IsNumeric(InStr(1, Sh.Name, „Einzel“))

ist m.E. doch immer „Wahr“ egal wie der Blattname lautet.

Ach darum hast das hier immer so gut geklappt… :wink:

Du hast natürlich recht, da ist der Vergleich noch stiften gegangen; die Zeile sollte heissen:

If IsNumeric(InStr(1, Sh.Name, "Einzel"))\>0 Then

Danke fürs Mitlesen und -Denken.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,
dein Code ist im Modul der Arbeitsmappe, die Sortiercodes in den Tabellenblättern habe ich gelöscht.
Hatte erst einen Laufzeitfehler, habe aber dann die Korrektur vom Reinhard gelesen. Meine Anwendung läuft Ordnungsgemäß, nur sortieren tut es nicht.
Habe also 3 Sportler Angemeldet, und mit Ergebnissen versehen
(siehe Tabellenblatt)

http://www.hostarea.de/server-07/Juli-9e5266306e.xls

Endergebnis gleich, Serie4 gleich, Serie3 gleich, es müsste jetzt nach Serie2 sortiert werden.

Das heißt:
Probe, Alfred müsste auf 1 (95)
Muster, klaus müsste auf 2 (94)
Test, Willi müsste auf 3 (93)

Ich habe allerdings auch einmal in Serie 4 einen Wert verändert,
da bewegt sich nichts.

Danke für eure Mühe, sind im Moment aber noch nicht weiter.

Gruß Skaletti!

Grüezi Skaletti

Hmmm, ich glaube bald, dass Du uns vera… willst…? :frowning:

dein Code ist im Modul der Arbeitsmappe,

Der Code gehört wie oben beschrieben ins Klassenmodul ‚Diese Arbeitsmappe‘ und nicht in ein Modul der Mappe. :frowning:

die Sortiercodes in
den Tabellenblättern habe ich gelöscht.

In deinr verlinkten Mappe ist gar kein Code drin :frowning:

Hatte erst einen Laufzeitfehler, habe aber dann die Korrektur
vom Reinhard gelesen. Meine Anwendung läuft Ordnungsgemäß, nur
sortieren tut es nicht.
Habe also 3 Sportler Angemeldet, und mit Ergebnissen versehen
(siehe Tabellenblatt)

http://www.hostarea.de/server-07/Juli-9e5266306e.xls

Endergebnis gleich, Serie4 gleich, Serie3 gleich, es müsste
jetzt nach Serie2 sortiert werden.

Das heißt:
Probe, Alfred müsste auf 1 (95)
Muster, klaus müsste auf 2 (94)
Test, Willi müsste auf 3 (93)

Ich habe allerdings auch einmal in Serie 4 einen Wert
verändert, da bewegt sich nichts.

Ja, logisch - wenn kein Code in der Mappe ist wird auch nichts sortiert.

Des weiteren hast Du darauf bestanden, dass nur die Blätter berücksichtigt werden, die ‚Einzel‘ im Namen drin haben, die Blätter in deiner Demo-Mappe hier heissen aber ‚Tabelle1‘ ‚Tabelle2‘ usf.

Ich habe dir weiter oben auch bereits geschrieben, das Du die Zahlen wirklich als Zahlen eintragen sollst und nicht als Text - in den Zellen stehen sie aber als Text drin :frowning:

…und da wunderst Du dich dann, dass nicht sortiert wird?

Danke für eure Mühe, sind im Moment aber noch nicht weiter.

…Du bist deshalb nicht weiter, weil Du keine unserer Anregungen konkret und korrekt umsetzt.
Ich weiss im Moment wirklich nicht ob ich noch Lust habe, hier weiter zu machen. :frowning:(

Ich habe deine Demo-Mappe hier mal so umgebaut dass das Ganze klappt - schau doch bitte selber zu, dass Du das so hinkriegst.

http://users.quick-line.ch/ramel/Demo-Daten/Skaletti…

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,

ich will garantiert niemanden vera…
In meiner Anwendung ist dein Code im Modul „Diese Arbeitsmappe“,
und die Tabellenblätter haben die Namen „LG frei Jugend Einzel“ usw.

Ich hatte lediglich das Tabellenblatt kopiert und verlinkt.

Vielleicht kapier ich als Anfänger nicht immer alles schnell genug.
Da muss man schon mal etwas Geduld haben.

Was meinst du mit Text und keine Zahlen?
Liegt es da dran das die Daten aus ein UserForm mit TextBoxen kommen, und durch den Wert aus einer ComboBox bestimmt wird, dass die Daten in die richtige Tabelle kommen?

Ich habe die Zahlen mal direkt in die Tabelle eingegeben, dann sortiert er richtig nach Serie 4+3. 2+1 nicht. Da geht die Zeile mit dem höheren Wert lediglich einen Platz nach oben.

Sollte Deine Energie erschöpft sein, bedanke ich mich für deine Mühe.

Gruß Skaletti!