Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Elo-ähnliches Ranking VBA

Elo-ähnliches Ranking VBA
16.07.2014 17:51:44
Sascha Tillmanns

Hallo liebe Excel-Experten,
ich bin dabei ein Elo-ähnliches eigenes Ranking Programm mittels Excel zu implementieren. Ich habe mich für Excel entschieden, weil die Daten der über 32000 Fußballspiele in einem Excelsheet gegeben waren.
Einige Grundkalkulationen zu den Daten habe ich direkt auf den Sheets gemacht und sitze nun an dem eigentlichen Rankingalgorithmus.
Hierzu habe ich eine VBA Function geschrieben, die jedoch leider stets #WERT! ausspuckt, wenn ich sie in einer Zelle ausführe.
Hier der Code:


Public Function AddGamesTo(ID As Integer) As Integer
Dim i As Integer
Dim j As Integer
Dim Rankings(310) As Integer
i = 1
For j = 1 To 310
Rankings(j) = 1500
Next j
For i = 1 To ID
Dim TeamAid As Integer
Dim TeamBid As Integer
Dim x As Integer
x = 0
TeamAid = Worksheets("Results").Cells(i, 10).Value
TeamBid = Worksheets("Results").Cells(i, 11).Value
If Worksheets("Results").Cells(i, 2).Text = Worksheets("Results").Cells(i, 6).Text Then  _
x = 1
Rankings(TeamAid) = Rankings(TeamAid) * (1 + Worksheets("Results").Cells(i, 15).Value) / _
100 - 1 / (1 + 10 ^ (-0.5 * (Rankings(TeamAid) - Rankings(TeamBid) + 100 * x)))
Rankings(TeamBid) = Rankings(TeamBid) * (1 + Worksheets("Results").Cells(i, 16).Value) / _
100 - 1 / (1 + 10 ^ (-0.5 * (Rankings(TeamBid) - Rankings(TeamAid))))
Next i
For j = 1 To 310
Worksheets("Teams").Cell(j, 2).Value = Rankings(j)
Next j
AddGamesTo = 1
End Function
Zur Erklärung des Codes:
Die Funktion soll ein vollständiges Ranking durchführen (aller 310 Mannschaften) bis zum Tage "ID". Tage sind hierbei als int gegeben und die Spiele nach Realdatum einfach durch Lfd. Nummer sortiert.
Das Array Rankings soll an jeder Stelle j das Ranking von Mannschaft j enthalten.
Mit Ranking ist hier eher ein Rating (also ein Wert) gemeint.
Initialisiert werden alle Einträge mit dem Startwert 1500
Anschließend soll "jeder Spieltag hintereinander gespielt werden" in der For-Schleife mit dem i als Laufindex.
In jedem Spieltag geschieht dabei folgendes:
Es wird die ID jeder Mannschaft herausgesucht (befindet sich in der Spalte 10 bzw. 11)
Wenn Mannschaft A auch Gastgeber ist, wird x auf 1 gesetzt.
Anschließend wird der entsprechende Eintrag im Array Rankings aktualisiert. Hierzu dient die zugegeben etwas unübersichtliche Formel.
Zuletzt soll nun auf dem Tabellenblatt "Teams" in Spalte B das Ranking eingetragen werden.
Ich kann das kompilieren und es führt auch zu keinen Fehlern. Wenn ich es in einer Excel-Zelle ausführe (also bsp. =AddGamesTo(1)") in eine beliebige Zelle eingebe kommt nur in dieser Zelle wie bereits erwähnt #WERT!
Vielen Dank im Voraus für eure Hilfe oder jede Idee die ihr einbringen könnt!

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
  • 16.07.2014 18:40:02
    Hajo_Zi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige