Supportnet / Forum / Tabellenkalkulation
Sortieren einer Liste per Funktion oder Makro
Frage
Hallo miteinander,
ich habe mit Excel eine Fußballtabelle erstellt und möchte diese nun sortieren in der Reihenfolge der erzielten Punkte, anschließend in der Reihenfolge der Tordifferenz. Die Namen der Mannschaften stehen in Spalte A, die Punkte in Spalte B und die Tordifferenz in Spalte C.
Ich möchte jedoch nicht über die Sortierfunktion von Excel gehen (Daten>Sortieren), sondern möchte nach jeder Eingabe automatisch eine erneute Sortierung, um jederzeit eine Auswertung zu haben.
Gibt es hierzu eine Funktion oder ein brauchbares Makro???
Vielen Dank schon jetzt für Eure Hilfe,
Mike
Antwort 1 von JoeKe
Hallo Mike,
kopier folgenden Code in das VBA-Projekt des Tabellenblattes in dem deine Fußballtabelle steht.
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("B1:C18"))
If Target Is Nothing Then Exit Sub
Columns("A:C").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Immer wenn eine Änderung in Spalte B oder Spalte C stattfindet wird die Tabelle neu sortiert.
MfG
JöKe
kopier folgenden Code in das VBA-Projekt des Tabellenblattes in dem deine Fußballtabelle steht.
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("B1:C18"))
If Target Is Nothing Then Exit Sub
Columns("A:C").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Immer wenn eine Änderung in Spalte B oder Spalte C stattfindet wird die Tabelle neu sortiert.
MfG
JöKe
Antwort 2 von Hase
Hallo JöKe,
vielen Dank für Deine schnelle Antwort. Leider hat die Lösung (zumindest bei mir) nicht funktioniert. Ich habe den Code wie beschrieben im VBA-Editor des entspr. Tabellenblattes eingetragen, aber es erfolgt keine Sortierung. Vielleicht hilft eine ausführlichere Beschreibung meiner Tabelle:
Ich habe die Gruppenspiele der WM eingetragen und per Formel aus den Ergebnissen die erzielten Punkte und die Tordifferenz (bei gleicher Punktzahl) ermitteln lassen. Die Punkte und die Tordifferenz habe ich den einzelnen Mannschaften der jeweiligen Gruppen zugeordnet (Tabelle A-H). Die Tabellen A-H sollen nun in absteigender Reihenfolge zuerst nach den Punkten, dann nach der Tordifferenz geordnet werden, damit feststeht, wer in seiner Gruppe Erster und Zweiter wurde.
Vielen Dank nochmal für die Mühe,
Mike
vielen Dank für Deine schnelle Antwort. Leider hat die Lösung (zumindest bei mir) nicht funktioniert. Ich habe den Code wie beschrieben im VBA-Editor des entspr. Tabellenblattes eingetragen, aber es erfolgt keine Sortierung. Vielleicht hilft eine ausführlichere Beschreibung meiner Tabelle:
Ich habe die Gruppenspiele der WM eingetragen und per Formel aus den Ergebnissen die erzielten Punkte und die Tordifferenz (bei gleicher Punktzahl) ermitteln lassen. Die Punkte und die Tordifferenz habe ich den einzelnen Mannschaften der jeweiligen Gruppen zugeordnet (Tabelle A-H). Die Tabellen A-H sollen nun in absteigender Reihenfolge zuerst nach den Punkten, dann nach der Tordifferenz geordnet werden, damit feststeht, wer in seiner Gruppe Erster und Zweiter wurde.
Vielen Dank nochmal für die Mühe,
Mike
Antwort 3 von JoeKe
Hallo Mike,
leider versteh ich den Aufbau deiner Tabelle noch nicht ganz.
Aber dennoch ein Versuch.
Folgender Code, der wieder in das VBA-Projekt der Tabelle gehört, sortiert die Spalten A-H erst absteigend nach Spalte B und dann nach Spalte C.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Columns("A:H").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Der Code wird nun bei jeder Änderung auf dem gesanten Tabellenblatt ausgeführt.
Ich hoffe das kommt dem nahe was du möchtest. Wenn nicht ruhig nochmal melden.
MfG
JöKe
leider versteh ich den Aufbau deiner Tabelle noch nicht ganz.
Aber dennoch ein Versuch.
Folgender Code, der wieder in das VBA-Projekt der Tabelle gehört, sortiert die Spalten A-H erst absteigend nach Spalte B und dann nach Spalte C.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Columns("A:H").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
Der Code wird nun bei jeder Änderung auf dem gesanten Tabellenblatt ausgeführt.
Ich hoffe das kommt dem nahe was du möchtest. Wenn nicht ruhig nochmal melden.
MfG
JöKe
Antwort 4 von Hase
Hallo JöKe,
das läuft nun, aber auf einen Laufzeitfehler hinaus. Mein Arbeitsblatt sieht wie folgt aus:
Tabellenblatt 1 beinhaltet die Gruppenspiele
Tabellenblatt 2 beinhaltet die Finalrunden
Tabellenblätter 3-10 sehen wie folgt aus:
Spalte A: Teilnehmerland
Spalte B: erzielte Punkte
Spalte C: Tordifferenz
Die Blätter 3-10 sollen nun in Reihenfolge der Punkte, danach in Reihenfolge der Tordifferenz sortiert werden, sobald sich dort Werte ändern.
Bisher erscheint der Laufzeitfehler, sobald ich in dem Tabellenblatt (zB. A) nur klicke.
Danke für Deine Gedult,
Mike
das läuft nun, aber auf einen Laufzeitfehler hinaus. Mein Arbeitsblatt sieht wie folgt aus:
Tabellenblatt 1 beinhaltet die Gruppenspiele
Tabellenblatt 2 beinhaltet die Finalrunden
Tabellenblätter 3-10 sehen wie folgt aus:
Spalte A: Teilnehmerland
Spalte B: erzielte Punkte
Spalte C: Tordifferenz
Die Blätter 3-10 sollen nun in Reihenfolge der Punkte, danach in Reihenfolge der Tordifferenz sortiert werden, sobald sich dort Werte ändern.
Bisher erscheint der Laufzeitfehler, sobald ich in dem Tabellenblatt (zB. A) nur klicke.
Danke für Deine Gedult,
Mike
Antwort 5 von CaroS
Hallo!
Für Freunde der Formelprogrammierung und des Sports ist hier mal eine wirklich nette Tabelle für die Fußball-WM. Vielleicht nicht ganz fertig und nicht 100-prozentig fehlerfrei, aber funktionstüchtig und eine sehr gute Möglichkeit, sich ein paar Anregungen zu holen und Tricks abzugucken.
http://www.herber.de/bbs/user/29613.zip
Der Thread dazu: http://www.herber.de/forum/messages/714232.html
Zum Beispiel kann man da sehen, wie man ohne großen Aufwand (mit einer Hilfsspalte) und ohne VBA nach Punkten und Tordifferenz sortieren kann, obwohl Excel im Formelbereich keine echte Sortierfunktion hat.
Viel Spaß damit!
CaroS
Für Freunde der Formelprogrammierung und des Sports ist hier mal eine wirklich nette Tabelle für die Fußball-WM. Vielleicht nicht ganz fertig und nicht 100-prozentig fehlerfrei, aber funktionstüchtig und eine sehr gute Möglichkeit, sich ein paar Anregungen zu holen und Tricks abzugucken.
http://www.herber.de/bbs/user/29613.zip
Der Thread dazu: http://www.herber.de/forum/messages/714232.html
Zum Beispiel kann man da sehen, wie man ohne großen Aufwand (mit einer Hilfsspalte) und ohne VBA nach Punkten und Tordifferenz sortieren kann, obwohl Excel im Formelbereich keine echte Sortierfunktion hat.
Viel Spaß damit!
CaroS
Antwort 6 von Hase
Hallo CaroS
danke für den Tip, leider kann ich von hier aus nicht darauf zugreifen, werde es daher später von zuhause mir mal ansehen. Deiner Bescheibung nach ist es aber genau das, wonach ich gesucht habe.
@JöKe
Falls Deine Lösung auch bei mir funktionieren sollte, bin ich natürlich genauso zufrieden...
Erst mal vielen Dank an Euch,
Mike
danke für den Tip, leider kann ich von hier aus nicht darauf zugreifen, werde es daher später von zuhause mir mal ansehen. Deiner Bescheibung nach ist es aber genau das, wonach ich gesucht habe.
@JöKe
Falls Deine Lösung auch bei mir funktionieren sollte, bin ich natürlich genauso zufrieden...
Erst mal vielen Dank an Euch,
Mike
Antwort 7 von JoeKe
Hallo Mike,
in meiner Testdatei läuft es wie du es möchtest. Zumindest so wie ich es verstanden habe.
Sobald Änderungen gemacht werden, wird die Tabelle sortiert.
Fußballtabelle
Gruß
JöKe
in meiner Testdatei läuft es wie du es möchtest. Zumindest so wie ich es verstanden habe.
Sobald Änderungen gemacht werden, wird die Tabelle sortiert.
Fußballtabelle
Gruß
JöKe
Antwort 8 von Hase
Hallo JöKe,
ich werde nochmal drüber brüten und melde mich morgen wieder.
Bis dahin und vielen Dank,
Mike
ich werde nochmal drüber brüten und melde mich morgen wieder.
Bis dahin und vielen Dank,
Mike
Antwort 9 von nighty
hi jöke :)
ein click und debugger
gruss nighty
ein click und debugger
gruss nighty
Antwort 10 von Hase
Hallo nighty,
hilft "ein click und debugger" auch bei meinem Problem weiter ??? Mir sagt es leider gar nichts...
Gruß,
Mike
hilft "ein click und debugger" auch bei meinem Problem weiter ??? Mir sagt es leider gar nichts...
Gruß,
Mike
Antwort 11 von nighty
hi mike :)
jöke ist bestimmt schon am werkeln,wart ab :))
gruss nighty
jöke ist bestimmt schon am werkeln,wart ab :))
gruss nighty
Antwort 12 von JoeKe
Hallo,
leider kann ich das Problem nicht nachvollziehen.
Dennoch eine andere Variante.
Fußballtabelle 2
In Tabelle2 werden die Punkte und die Tordifferenzen ermittelt und durch Verknüpfung in Tabelle1 übertragen. Beim öffnen der Tabelle1 wird der Bereich A2 bis H5 sortiert.
Der Code befindet sich wieder im VBA-Projekt des Tabellenblattes und muss in deinem Fall in Tabelle3 - Tabelle10 kopiert werden. Der Bereich der sortiert werden soll, muss eventuell noch angepasst werden.
Falls auch diese Variante nicht funktioniert, lade doch mal, wenn möglich, deine Tabelle bei www.netupload.de hoch.
MfG
JöKe
leider kann ich das Problem nicht nachvollziehen.
Dennoch eine andere Variante.
Fußballtabelle 2
In Tabelle2 werden die Punkte und die Tordifferenzen ermittelt und durch Verknüpfung in Tabelle1 übertragen. Beim öffnen der Tabelle1 wird der Bereich A2 bis H5 sortiert.
Der Code befindet sich wieder im VBA-Projekt des Tabellenblattes und muss in deinem Fall in Tabelle3 - Tabelle10 kopiert werden. Der Bereich der sortiert werden soll, muss eventuell noch angepasst werden.
Falls auch diese Variante nicht funktioniert, lade doch mal, wenn möglich, deine Tabelle bei www.netupload.de hoch.
MfG
JöKe
Antwort 13 von CaroS
Hallo JöKe,
ich habe gerade noch einmal Deine AW3 gelesen, dabei ist mir folgendes aufgefallen:
Hase schreibt:
Da in den meisten Sportarten die Punkte (in Spalte B) Vorrang vor der Tordifferenz (in Spalte C) haben, müsste man entweder eine einzige Sortierung mit 2 Sortierebenen (B höher als C) oder zwei einfache Sortierungen nacheinander durchführen, dann aber C vor B!
So macht das ja eigentlich auch Deinen Code in AW3 - wenn ich ihn richtig verstehe.
Columns("A:H").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1"), Order2:=xlDescending, ...
Dann würde also lediglich die Beschreibung "nach Spalte B und dann nach Spalte C" nicht so ganz passen.
Ich wollte nur mal darauf hinweisen. Da ich aber den aktuellen Stand Eures VBA-Codes nicht habe und nicht weiß, ob Ihr gerade in der richtigen Rangfolge sortiert, will ich mich ansonsten nicht weiter einmischen.
"ein click und debugger" verstehe ich auch einfach nur nicht, ist wohl Fachchinesich.
Gruß,
CaroS
ich habe gerade noch einmal Deine AW3 gelesen, dabei ist mir folgendes aufgefallen:
Zitat:
Folgender Code ... sortiert die Spalten A-H erst absteigend nach Spalte B und dann nach Spalte C.
Folgender Code ... sortiert die Spalten A-H erst absteigend nach Spalte B und dann nach Spalte C.
Hase schreibt:
Zitat:
Die Namen der Mannschaften stehen in Spalte A, die Punkte in Spalte B und die Tordifferenz in Spalte C.
Die Namen der Mannschaften stehen in Spalte A, die Punkte in Spalte B und die Tordifferenz in Spalte C.
Da in den meisten Sportarten die Punkte (in Spalte B) Vorrang vor der Tordifferenz (in Spalte C) haben, müsste man entweder eine einzige Sortierung mit 2 Sortierebenen (B höher als C) oder zwei einfache Sortierungen nacheinander durchführen, dann aber C vor B!
So macht das ja eigentlich auch Deinen Code in AW3 - wenn ich ihn richtig verstehe.
Columns("A:H").Sort Key1:=Range("B1"), Order1:=xlDescending, Key2:=Range("C1"), Order2:=xlDescending, ...
Dann würde also lediglich die Beschreibung "nach Spalte B und dann nach Spalte C" nicht so ganz passen.
Ich wollte nur mal darauf hinweisen. Da ich aber den aktuellen Stand Eures VBA-Codes nicht habe und nicht weiß, ob Ihr gerade in der richtigen Rangfolge sortiert, will ich mich ansonsten nicht weiter einmischen.
"ein click und debugger" verstehe ich auch einfach nur nicht, ist wohl Fachchinesich.
Gruß,
CaroS
Antwort 14 von nighty
hi caros :)
datei runtergeladen,einmal angeklickt,fehler
entsteht nun ein fehler der nicht behandelt wird ,so wird in den debugmodus gewechselt mit halt an der entsprechenden stelle
in kurzform
click debug
schniff mir liegen doch keine beschreibungen wie du bestimmt weisst :)))
gruss nighty
datei runtergeladen,einmal angeklickt,fehler
entsteht nun ein fehler der nicht behandelt wird ,so wird in den debugmodus gewechselt mit halt an der entsprechenden stelle
in kurzform
click debug
schniff mir liegen doch keine beschreibungen wie du bestimmt weisst :)))
gruss nighty

