Mittelwertberechnung von bestimmen Zeillen (Bedingung)

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Me_Hide.

    Mittelwertberechnung von bestimmen Zeillen (Bedingung)

    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.

    Visual Basic-Quellcode

    1. Sub GetIntForAvgGesamt() ' Zuerst wird berechnet wie viele Spieler bzw. Zellen der aktuelle TSS beinhaltet
    2. Dim n As Long 'Zeilen Anzahl
    3. Range("A2").Select
    4. n = Selection.CurrentRegion.Rows.count 'der Variable n wird die Anzahl der Zeilen zugewiesen
    5. Dim i As Integer
    6. Dim j As Integer
    7. Dim cell As String
    8. Dim sum As Long
    9. Dim avg As Double
    10. i = 3
    11. avg = 0
    12. Do While i <= 28
    13. For j = 2 To n
    14. On Error Resume Next
    15. cell = Worksheets(3).Cells(j, i).value 'Input wird generiert --> Variable Cell (STRING!!)
    16. sum = sum + GetIntegerOutOfCell(cell) 'der generierte String wird an die Funktion get GetIntegerOutOfCell weitergegeben
    17. Next 'diese ermittelt eine Zahl und gibt diese zurück, diese wird sum addiert
    18. Call CalculateAvg(sum, n, i) 'die Funktion zur Berechnung der Mittelwerte wird aufgerufen, übergibt Summe, Spieleranzahl (n) und Spaltenposition (i)
    19. sum = 0 'setzt sum auf 0 um für die nächste Spalte wieder mit der Berechnung beginnen zu können
    20. i = i + 1
    21. Loop
    22. End Sub


    Hier noch die Funktion zur Berechnung der Mittelwerte

    Visual Basic-Quellcode

    1. Sub CalculateAvg(sum As Long, n As Long, i As Integer)
    2. avg = sum / (n - 1) 'Berechnung des Mittelwerts, die Summe der Werte wird durch die Anzahl der Zeilen n (-1 = Anzahl der Spieler) dividiert
    3. Worksheets(3).Cells(n + 3, i).Select 'Auswahl des der Zelle in die der Mittelwert hineingeschrieben werden soll
    4. ActiveCell.NumberFormat = "0.00" 'die Zahl in der Zelle soll mit zwei Kommastellen ausgegeben werden
    5. ActiveCell = avg
    6. ActiveCell.HorizontalAlignment = xlCenter 'Zentrierung
    7. Worksheets(3).Cells(n + 2, i).Select
    8. 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
    Hallo



    Vorab: Ich konnte nicht ganz folgen, was du berechnen möchtest, aber du willst also nur für bestimmte Spielertypen eiinen Mittelwert.

    Dann solltest du die Spalte abfragen, in der die Position steht. Wenn die richtige Position drinsteht, summierst du die Werte in der Zeile und addierst sie dann zu den bisherigen Werten.

    Das machst du z. B. wie folgt:

    For Zeile = 1 to activeSheet.UsedRange.Rows.Count

    if activesheet.cells(Zeile, Wo auch immer die Position drinsteht) = "Stürmer" then

    Summe = Summe + was auch immer

    Zähler = Zähler + 1

    end if

    next

    Durchschnitt = Summe/Zähler



    Wenn du aus den ganzen Variablen Arrays machst, kannst dunoch einen Schleife drum herum legen ->

    for Pos_Index = 1 to Anzahl Positionen

    For Zeile = 1 to activeSheet.UsedRange.Rows.Count

    if activesheet.cells(Zeile, Wo auch immer die Position drinsteht) = Position(Pos_Index) then

    Summe(Pos_Index) = Summe(Pos_Index) + was auch immer

    Zähler(Pos_Index) = Zähler(Pos_Index) + 1

    end if

    next

    next

    Durchschnitt(Pos_Index) = Summe(Pos_Index)/Zähler(Pos_Index)


    Daten irgendwo hinschreiben.

    __________________

    Hast du schonmal über die Funktionen "Summenprodukt" nachgedacht, die könnte die jede Menge Programmieren sparen.



    mfg



    Me_Hide