Kann ich bei Excel die Sortierung automatisch aktualisieren lassen?
Ich möchte z. B. eine Tabelle machen
Peter Müller Punkte 50 Rang 1 Vanessa Schmidt Punkte 40 Rang 2 Sabine Mayer Punkte 30 Rang 3
Jetzt verändert sich im Laufe der Saison die Punktanzahl, irgendwann hat z. B. Vanessa Schmidt 70 Punkte und ist jetzt auf Rang 1. Dann möchte ich nicht nur, dass dann Rang 1 dort steht (das ist ja kein Problem) sondern, ich möchte dass Ihr Name (inkl. sämtlicher Nebenspalten - also Punkte und Rang) dann auch eine Zeile nach oben hüpft, ohne dass ich wieder manuell die Sortieren Funktion bemühen muss.
Wie bekommt man das hin?
2 Antworten
Dazu braucht man keine Programmierkenntnisse. Gesetzt dem Fall, du hast drei Spalten:
A | B | C
Name | Punkte | Rang
Dies Zeilen können unsortiert stehen. Eine sortierte Ausgabe erzeugen wir in zwei weiteren Spalten D und E, "Name (nach Rang)" und "erzielte Punkte".
Wichtig dabei, dass der Rang nur als Zahl eingegeben wird.
(Falls man den Punkt angezeigt haben will, einfach als benutzerdefiniertes Format "#." eingeben.)
In Zelle D2 schreibe die Formel:
=INDEX(A:A;VERGLEICH(ZEILE()-1;C:C;0);1)
und kopiere die Formel nach unten.
Der Befehl Index hat zwei Varianten. In dieser hier braucht er folgende Informationen:
INDEX( <Zellbereich> ; <Zeilenindex> ; <Spaltenindex> )
Die notwendige Zeile wird dabei mit dem Befehl VERGLEICH ermittelt. Dieser funktioniert mit folgenden Informationen:
VERGLEICH( <Index> ; <Zellbereich> ; <Vergleichstyp> )
Der gegebene Befehl schaut also zuerst mit dem Befehl VERGLEICH, wo der 1., 2. usw. Platz ist, und nimmt dann den entsprechenden Wert aus der Namensspalte.
Wenn du jetzt noch die dazu gehörenden Punkte ausgeben willst, dann schreib in Zelle E2 die Formel:
=INDEX(B:B;VERGLEICH(ZEILE()-1;C:C;0);1)
und kopiere die Formel nach unten.
Bei den Wettkämpfen ein freundliches Miteinander ohne Zwischenfälle!
Danke für den Hinweis. Die Bemrkung ist richtig, INDEX kann mit Doppelnennung nichts anfangen. Also brauchen wir neben der Plazierung noch eine Spalte mit der Reihenfolge. Diese muss eindeutige Werte aufweisen.
Wir fügen also hinter der Zeile C die Spalte D ein, mit der Formel in D2: =WENN(ZÄHLENWENN(C:C;C2)=1;C2;C2+ZÄHLENWENN(C$2:C2;C2)-1).
Dabei scheun wir, ob die jeweilige Plazierung nur einmal vorkommt, dann reicht es, sie zu kopieren. Im andern Fall nehmen wir die Platzierung und zählen die Anzahl der bisher vorkommenden gleichen Platzierungen dazu und ziehen eins ab. Sonst zählen wir doppelt.
Jetzt müssen wir noch die ursprünglichen Spalten D und E korrigieren. Diese sollten nun Spalte E und F sein.
In Zelle E2 steht nach der Korrektur: =INDEX(A:A;VERGLEICH(ZEILE()-1;D:D;0);1) und in Zelle F2 =INDEX(B:B;VERGLEICH(ZEILE()-1;D:D;0);1). Wir beziehen uns also nicht mehr auf die Rangliste, sondern auf die eigens eingerichtete Reihenfolge.
So ist die Reihenfolge eindeutig geklärt, auch wenn bei Gleichstand die alphabetische Reihenfolge nicht unbedingt gewährleistet wird.
vielen Dank für Deine Hilfe. Ich habe es in einem separaten xls probiert. Da funktioniert es einwandfrei. Integriert in meine große Tabelle dann leider wieder nur #NV - allerdings in der Namensspalte und der Punktespalte. Ich weiß leider nicht was ich falsch mache. Gibt es eine Möglichkeit, Dir das xls mal zu senden?
hab den Fehler schon gefunden. Es lag an dem -1 - bei mir in der großen Tabelle sind oben drüber noch andere Werte und das musste angepasst werden.
Vielen Dank nochmal :-))))
Einen einfachen Weg gibts hier leider nicht. Jedenfalls nicht das ich wüsste.
Aber es geht. Dazu muss man ein Makro in VBA programmieren, welches die Sortieren-Funktion auf den gewünschten Zellbereich anwendet wann immer sich Zelleninhalte (darin) ändern. Ich werde es aber nicht programmieren, da ich zum einen unter Linux bin und kein Microsoft Office habe und zum anderen weil ich Visual Basic verabscheue.
Aber vielleicht findet sich jemand. Die VBA-Funktion die man dafür braucht ist Range.Sort(), z.B. Columns("A:D").Sort mit entsprechenden Parametern nach welchen Spalten sortiert werden soll. Das Deklarieren/Überschreiben von Worksheet_Change() sollte z.B. die automatische Ausführung ermöglichen.
Hi,
vielen Dank für die super Antwort. Da sind wir schon auf dem richtigen Weg. Habe gerade angefangen das ganze auszuprobieren. Jetzt taucht allerdings schon gleich zu Beginn das erste Problem auf: was mache ich bei Punktgleichstand zweier Personen - es kann ohne weiteres ja sein dass 2 Leute z. B. beide 10 Punkte und somit beide Rang 2 haben. Dann zeigt Excel bei der genannten INDEX Formel aber bei einem der beiden #NV