Option Explicit
Sub Beispiel_ohne_Schleife()
With Worksheets("Tabelle1") 'ggf. anpassen
'+++ Beispielwerte generieren +++
With .Range("A2:A20")
.Formula = "=RANDBETWEEN(-100,100)"
.Value = .Value 'Formelergebnisse in "harte" Werte umwandeln
End With
'++++++++++++++++++++++++++++++++
'ab hier geht der eigentliche Code los
Dim n As Long
n = 3 'Anzahl
'Bereich: B2 bis B?
With .Range("B2", .Cells(.Rows.Count, "A").End(xlUp).Offset(1 - n, 1))
' 1) wir suchen hier in Spalte A von unten nach oben, bis wir
' die erste Zelle mit Inhalt gefunden haben -> letzte Zeile mit Inhalt in Spalte A
' 2) Anschließend verschieben wir die Referenz der gefundenen Zelle,
' sodass sie auf die Spalte B zeigt und (1-[anzahl]) Zeilen nach oben
' (so schließen wir leere Zellen aus der Mittelwert-Berechnung)
'Zellenformat def.
.NumberFormat = "0.00"
'Formel in R1C1 Schreibweise (deutsch: Z1S1 ... steht für Zeile/Spalte)
' diese Schreibweise ermöglicht relative zellenbezogene Addressierung
' > Beispiel: die Formel in B2 := AVERAGE(RC[-1]:R[2]C[-1]) | mit n := 3
' >>> bedeutet:
' RC[-1] -> B2 wird zu A2
' R[2]C[-1] -> B2 wird zu A4
' -> A2:A4
'
'Dadurch, das wir hier nicht absolute Adressen angeben, funktioniert das ganze
'für jede Zelle in dem angegebenen Bereich individuell
' (Dies entspricht: Einen Bereich markieren, etwas in die Zelle schreiben und mit STRG+Enter abschließen).
.FormulaR1C1 = "=AVERAGE(RC[-1]:R[" & (n - 1) & "]C[-1])"
End With
End With
End Sub
|