Nein, den Bereich musst du anders festlegen:
In der For-Schleife wird das Objekt „zelle“ einmal mit jeder Zelle des Angegebenen Bereiches gleichgesetzt. Du schreibst also dann:
For Each zelle In Range(„B9:G9“)
…
next
Dann ist aber der Bereich fixiert - keine Zahl hinter G9 wird mehr betrachtet. Wenn deine Zahlen horizontal gelistet sind, dann musst den Code folgendermaßen nutzen:
Set zelleStart = Range(„B9“)
For Each zelle In Range(zelleStart, zelleStart.End(xlToRight))
If zelle.Value = 0 Then
zelle.Value = (zelle.Offset(0, -2).Value _
- zelle.Offset(0, -1).Value _
- zelle.Offset(0, 1).Value _
- zelle.Offset(0, 2).Value) / 4
End If
Next zelle
Kurze Erklärung zu Offset(): Das ist eine verschiebung des Bereiches (vertikal, horizontal)
zelle.Offset(2,3) spricht die Range an, die 2 Reihen unter und 3 Spalten rechts von zelle ist.
Sollen die Zahlen nicht über/untereinander, sondern vor/hintereinander gemittelt werden, dann musst du das natürlich tauschen.
Erwartest du keine lineare Änderung deiner Werte, musst du auf eine andere Interpolation zurückgreifen. Ich habe auch noch Newton-Interpolation da. Hier der Code mit einer linearen Interpolation. Versuche ihn einmal Schritt für Schritt zu verstehen. Das kannst am besten machen, wenn du Haltepunkte in den Code machst und dich mit F8 Zeile für zeile bewegst. Mit der maus kannst du auch mal über die einzelnen Variablen fahren und dir den Wert anzeigen lassen.
Sub zahlenPrüfen()
Dim zelleStart As Range, zelle As Range
Set zelleStart = Range(„B9“)
For Each zelle In Range(zelleStart, zelleStart.End(xlToRight))
If zelle.Value = 0 Then
'hier startet die Interpolation
Dim y1 As Double, y2 As Double, x1 As Double, x2 As Double 'Werte für die Interpolation
Dim i As Integer 'eine Laufvariable
x1 = zelle.Offset(0, -1).Value
'letzter richtige X-Wert
y1 = 0
'Startwert
i = 0
While zelle.Offset(0, i).Value = 0
'hier wird eine Laufvariable i erhöht,
'solange 0en aufeinander folgen. Damit
'wird das Ende der „0en-Reihe“ gesucht
i = i + 1
Wend
x2 = zelle.Offset(0, i).Value
'erste Zelle mit einer richtigen Zahl nach der 0en-Reihe
y2 = i + 1
'Zähler auf die folgende Zahl setzen
i = 0
While zelle.Offset(0, i).Value = 0
'noch einmal alle 0en durchgehen und mit
'dem Ergebnis der Interpolation ersetzen
zelle.Offset(0, i).Value = x1 + ((x2 - x1) / (y2 - y1)) * (i + 1 - y1)
'Interpolation
i = i + 1
Wend
End If
Next zelle 'Ende der For-Schleife
End Sub