Excel Fußball-Tabelle automatisch sortieren

Friemar

Grünschnabel
Hi =)

habe zur Wm 2010 mir eine eigene Tabellenkalkulation erstellt, da mir die offizielle Variante nicht so sehr gefällt ;-). Bisher kam ich auch ganz gut alleine klar, nun stehe ich allerdings mit meinen Excel-Kenntnissen am Ende und werde auch trotz Google nicht wirklich schlau aus der Sache ;-)...

Nun zu meinem Problem:

Ich habe für jede einzelne Vorrundengruppe eine Tabelle erstellt in der Siege, Niederlagen, Unentschieden, Tordifferenz sowie die Punkte festgehalten werden. Nun soll nach jedem Eintragen eines Ergebnisses diese kleine Tabelle absteigend nach Punkten sortiert werden. Hier mal ein Screenshot:

wmplaner2010.th.jpg


Uploaded with ImageShack.us

Also soll erst nach Punkten (sprich von N4-N7) und anschließend wenn es da eine Übereinstimmung gibt nach der Tordifferenz (M4-M7) sortiert werden =)

Ich wäre wirklich sehr dankbar, wenn mir jemand bei diesem Problem helfen könnte. Ich weiß man kann es auch per Hand mit ein paar Mausklicks sortieren lassen, aber ich hätte es gerne automatisch =)

Mfg
 
Zuletzt bearbeitet:
Nun ja,
Ich weiß man kann es auch per Hand mit ein paar Mausklicks sortieren lassen,
die Grundlagen hast du ja, Wenn dir dies paar Klicks zu viel sind, dann zeichne doch einfach die Aktion des Sortierens als Makro auf. Dann legst du noch einen Button an und anschließend reicht ein einziger Klick, um die Tabellen zu sortieren. Das hat doch was, oder? :)
 
Hey =)

erst mal vielen Dank für die Antwort =) Habe das jetzt soweit mit Makros und Buttons hinbekommen das klappt super =) Danke :) Trotzdem würde es mich schon noch interessieren, wie das denn ohne Buttons klappt? Also dass nach jeder Eingabe eines Ergebnisses die Tabellen automatisch sortiert werden?

Lg
 
Ich weiß ja nicht wie du die Sortierung jetzt machst, aber wenn du ein Makro aufgezeichnet hast, dann kannst du diesen Code einfach in die "Worksheet_Change" Prozedur der entsprechenden Tabelle kopieren.

Diese Prozedur wird immer dann ausgeführt wenn sich etwas in der Tabelle geändert hat. Es gibt dort auch das Target Objekt, mit diesem kannst du dann die Spalte auslesen die geändert wurde. Dadurch bzw. in Verbindung mit einer IF-Abfrage kannst du die Sortierung dann auf bestimmte Spalten beschränken.


Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then
    'hier der Code zum Sortieren
End If

End Sub

Dieser Code würde beispielsweise nur dann ausgeführt wenn in Spalte 2 (B) etwas geändert wird.

Gruß Thomas
 
Das werde ich später einmal ausprobieren =) Vielen Dank Thomas und auch danke an Honni ;-) bin noch nicht dazu gekommen mir den Beitrag in dem anderen Forum durchzulesen ;-)

Lg
 
Das ganze klappt wunderbar tombe =) Allerdings habe ich nun das Problem, dass nach jedem ändern einer Zelle in der Tabelle sofort immer nach unten gescrollt wird weil unten eine Tabelle soritert wird. Kann man dieses scrollen nicht deaktivieren? So dass man einfach auf der Höhe der Zelle bleibt, die man gerade bearbeitet hat?
 
Also wenn ich sortiere, springt Excel nicht zu dem Bereich der sortiert wurde. Es muss also irgendwas in deinem Code dieses Verhalten verursachen. Zeig doch mal wie du dein Problem jetzt gelöst hast, dann finden wir bestimmt auch die Ursache für diesen "Fehler".

Gruß Thomas
 
Ich hab im VBA-Editor folgenden Code eingegeben ;-)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

'Gruppe A


    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range("N4:N7" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I4:N7")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


'Ende Gruppe A

'Gruppe B

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N11:N14"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I11:N14")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe B

'Gruppe C

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N18:N21"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I18:N21")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe C

'Gruppe D

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N25:N28"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I25:N28")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe D

'Gruppe E

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N32:N35"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I32:N35")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Gruppe F

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N39:N42"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I39:N42")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe F

'Gruppe G

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N46:N49"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I46:N49")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe G

'Gruppe H

    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Wm Planer").Sort.SortFields.Add Key:=Range( _
        "N53:N56"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Wm Planer").Sort
        .SetRange Range("I53:N56")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
'Ende Gruppe H

Ich wusste nicht genau, wie ich die If-Bedingung implementieren sollte, da es mehrere Zellen sind nachdem eine "kleine" Tabelle aktualisiert werden muss ;-) (s. Screenshots)

So sieht die Tabelle aus (es sind 2 Screenshots, da man halt nach unten scrollen muss ;-))

35545776.th.jpg


Uploaded with ImageShack.us

11430704.th.jpg


Uploaded with ImageShack.us

LG
 
Zuletzt bearbeitet:
Also warum bei dir Excel nach dem Sortieren irgendwohin springt verstehe ich nicht. Kann es bei mir allerdings nicht testen weil der Code nicht ausgeführt wird (event. liegt es an der Excel Version, ich habe hier 2000).

Damit das Makro aber nur ausgeführt wird wenn du ein Ergebnis in den Spalten E bzw. F eingibst, setzte einfach den kompletten Code in die IF-Abfrage.

Visual Basic:
If (Target.Column = 5 Or Target.Column = 6) And (Target.Row >= 3 And Target.Row <= 35) Then
    'hier kommt dann der gesamte Code
End If

Denn Wert "Target.Row <= 35" musst du halt noch so anpassen das der gesamte "Spielbereich" erfasst wird.

Gruß Thomas
 

Neue Beiträge

Zurück