Hy ich arbeite gerade an einem größeren VBA-Projekt. Ich erstelle an Analyse-Tool für Fußballdaten. Als Grundlage habe ich ein Excel-Sheet in dem pro Zeile alle Atrribute (1 Attribut = 1 Spalte z.b. Vorname, Nachname, Tore usw). aufgelistet sind.
Nun möchte ich von den einzelnen Spalten die Mittelwerte erechnen. Für die gesamte Mannschaft also alle Spieler hab ich das schon hinbekommen. Jedoch gibt es auch ein Attribut, dass die Position des Spielers darstellt z.b. Torwart, Stürmer usw.
Nun möchte ich z.B. nur jene Spieler herausnehmen, die auf der Position Stürmer spielen und dann die Mittelwert der einzelnen Attribute berechnen. Nur hab ich keine Ahnung wie ich das umsetzen soll. Hier mal mein Code für die Berechnung der Gesamtwerte. Dazu sei noch gesagt, dass die ganze so umfangreich geworden ist, weil in den einzelnen Zelle immer die aktuelle Werte bzw. die Werte von Saisonbeginn angegeben sind z.B. steht in der Spalte Torwart-Stärke (3)(2) d.h. Stärke im Moment 3 zu Beginn 2 ... deshalb musste ich da noch eine Funktion schreiben, die hier den String etwas filtert.
Hier die 3 Funktionen die ich für die Ermittlung der Mittelwerte verwende.
Hier noch die Funktion zur Berechnung der Mittelwerte
Die Funktion GetIntegerOutOfCell dient nur wie bereits erwähnt um String wie z.B. (3)(2) zu filtern.
Hat jemand einen Denkanstoss für mich, wie ich die Berechnung für die einzelnen Positionen umsetzen könnte. Ich denke dass man eine eigene Funktion schreiben müsste bzw. für jede Position eine eigene.
Danke im Vorraus
Nun möchte ich von den einzelnen Spalten die Mittelwerte erechnen. Für die gesamte Mannschaft also alle Spieler hab ich das schon hinbekommen. Jedoch gibt es auch ein Attribut, dass die Position des Spielers darstellt z.b. Torwart, Stürmer usw.
Nun möchte ich z.B. nur jene Spieler herausnehmen, die auf der Position Stürmer spielen und dann die Mittelwert der einzelnen Attribute berechnen. Nur hab ich keine Ahnung wie ich das umsetzen soll. Hier mal mein Code für die Berechnung der Gesamtwerte. Dazu sei noch gesagt, dass die ganze so umfangreich geworden ist, weil in den einzelnen Zelle immer die aktuelle Werte bzw. die Werte von Saisonbeginn angegeben sind z.B. steht in der Spalte Torwart-Stärke (3)(2) d.h. Stärke im Moment 3 zu Beginn 2 ... deshalb musste ich da noch eine Funktion schreiben, die hier den String etwas filtert.
Hier die 3 Funktionen die ich für die Ermittlung der Mittelwerte verwende.
Visual Basic-Quellcode
- Sub GetIntForAvgGesamt() ' Zuerst wird berechnet wie viele Spieler bzw. Zellen der aktuelle TSS beinhaltet
- Dim n As Long 'Zeilen Anzahl
- Range("A2").Select
- n = Selection.CurrentRegion.Rows.count 'der Variable n wird die Anzahl der Zeilen zugewiesen
- Dim i As Integer
- Dim j As Integer
- Dim cell As String
- Dim sum As Long
- Dim avg As Double
- i = 3
- avg = 0
- Do While i <= 28
- For j = 2 To n
- On Error Resume Next
- cell = Worksheets(3).Cells(j, i).value 'Input wird generiert --> Variable Cell (STRING!!)
- sum = sum + GetIntegerOutOfCell(cell) 'der generierte String wird an die Funktion get GetIntegerOutOfCell weitergegeben
- Next 'diese ermittelt eine Zahl und gibt diese zurück, diese wird sum addiert
- Call CalculateAvg(sum, n, i) 'die Funktion zur Berechnung der Mittelwerte wird aufgerufen, übergibt Summe, Spieleranzahl (n) und Spaltenposition (i)
- sum = 0 'setzt sum auf 0 um für die nächste Spalte wieder mit der Berechnung beginnen zu können
- i = i + 1
- Loop
- End Sub
Hier noch die Funktion zur Berechnung der Mittelwerte
Visual Basic-Quellcode
- Sub CalculateAvg(sum As Long, n As Long, i As Integer)
- avg = sum / (n - 1) 'Berechnung des Mittelwerts, die Summe der Werte wird durch die Anzahl der Zeilen n (-1 = Anzahl der Spieler) dividiert
- Worksheets(3).Cells(n + 3, i).Select 'Auswahl des der Zelle in die der Mittelwert hineingeschrieben werden soll
- ActiveCell.NumberFormat = "0.00" 'die Zahl in der Zelle soll mit zwei Kommastellen ausgegeben werden
- ActiveCell = avg
- ActiveCell.HorizontalAlignment = xlCenter 'Zentrierung
- Worksheets(3).Cells(n + 2, i).Select
- End Sub
Die Funktion GetIntegerOutOfCell dient nur wie bereits erwähnt um String wie z.B. (3)(2) zu filtern.
Hat jemand einen Denkanstoss für mich, wie ich die Berechnung für die einzelnen Positionen umsetzen könnte. Ich denke dass man eine eigene Funktion schreiben müsste bzw. für jede Position eine eigene.
Danke im Vorraus