VBA -- "viele Wege führen nach Rom"
21.02.2019 10:50:28
Fred
Hallo Excel-Profis,
im Moment bin ich mal so richtig gefrustet.
Normalerweise in wenigen Sekunden endsprechend runterkopierte, flott geschriebene Zellen-Formeln werden mit bei mir,- in VBA geschrieben, zu einer den Tag ausfüllenden Beschäftigung (ohne abschließenden Erfolgserlebnis).
Noch habe ich eine Schranke,- bzw. mir unüberwindbare Mauer im Kopf.
Aktuelles Beispiel;
Vorgestern hatte ich selbst einen Code geschrieben und bat hier im Forum um die Ergänzung, dass meine Ergebniszelle bis zum letzten Eintrag entsprechend runterkopiert werden soll. Ich erhielt auch Feedback.
Mein Code
Sub a01_Treffer()
Dim n
Dim summe
For n = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(n, 3).Value = Cells(6, 54) Then
summe = summe + Cells(n, 5).Value
End If
If Cells(n, 4).Value = Cells(6, 54) Then
summe = summe + Cells(n, 6).Value
End If
Next
Range("BE6") = summe
End Sub
Der Code von MCO
Sub a02_Treffer()
Dim mannsch As Range, TEAM As Range
Dim summe As Long, spiel As Long
Set such_rng = Range("C2:D" & ActiveSheet.UsedRange.Rows.Count).SpecialCells( _
xlCellTypeConstants)
For Each mannsch In Range("BB6:BB11")
summe = 0
spiel = 0
For Each TEAM In such_rng
If TEAM = mannsch Then
summe = summe + TEAM.Offset(0, 2)
spiel = spiel + 1
End If
Next TEAM
mannsch.Offset(0, 3) = summe
mannsch.Offset(0, 1) = spiel
Next
End Sub
Die Excel-Experten werden wahrscheinlich bei meiner Version eher die Augen verdrehen, ich allerdings, kann den Lösungsvorschlag absolut nicht lesen,- nachvollziehen. Für mich sieht der Code von MCO eher wie ein schräger Abfahrtsplan des Berliner HBF aus,- während ich bei meiner Version auf Anhieb erkenne, worum es geht.
Die Excel-Profis unterscheiden hier bei meinem Beispiel wohl von Selektieren und Referenzieren. In meinem Code habe ich selektiert, MCO hat referenziert.
Ich denke mal, dass wenn ich bei VBA hängen bleibe, ich früher oder später ebenfalls Code so weit wie möglich kürze,- referenziere und irgendwann mal selbst die Augen über meine Anfänge verdrehe. Doch Stand jetzt: In meiner Variante sehe ich das einzige logische und mir nachvollziehbare. Ich möchte gerne so wie oben den Code schreiben (Fragen stellen sich auch so ohnehin ..) und Stück für Stück Referenz einbauen. Performance, Fehleranfälligkeit etc. außer Betracht lassen.
Meine Anfrage;
Kann mir vielleicht jemand bitte diesen Code soweit ergänzen, dass das Ergebnis in Zelle B6 bzw (6, 57) entsprechen runter kopiert wird (bis zu der Zeile, die als letztes in Spalte BA bzw. Spalte 53 beschrieben ist). Also mein geschriebener Teil weitgehend erhalten bleibt.
Hier nochmals mein bisheriges VBA
Sub a01_Treffer()
Dim n
Dim summe
For n = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(n, 3).Value = Cells(6, 54) Then
summe = summe + Cells(n, 5).Value
End If
If Cells(n, 4).Value = Cells(6, 54) Then
summe = summe + Cells(n, 6).Value
End If
Next
Range("BE6") = summe
End Sub
Und für das bessere Verständnis, eine gekürzte Mappehttps://www.herber.de/bbs/user/127811.xlsb
Nochmals, es geht mir hier nur um mein Verstehen, und das ich in Zukunft Stück für Stück optimiere. Es bringt mir in dieser Anfängerphase herzlich wenig, wenn ich hier im Forum Lösungsvorschläge erhalte, mir das alles zu kryptisch erscheint und nur kopiere und einfüge. Bitte habt (noch) Verständnis für meine Art des Lernens.
Mit freundlichen Gruß
Fred Neumann