Wie kann ich leere Zellen über der letzten gefüllten Zelle mit dem Wert darüber füllen?

Hallo,

ich habe folgendes konstrukt:

In den Zellen B4:B45 trage ich Werte ein. In Zelle B4 steht ein Wert. Den nächsten Wert trage ich jetzt z.B. erst in Zeile B7 ein. Jetzt möchte ich, dass mir Excel per Makro die Zellen B5:B6 mit dem Wert aus B4 füllt.

Folgendes Makro habe ich vorliegen:

Sub Leerzellen()
Dim Bereich As Range, Zelle As Range
Set Bereich = Range(„B4:B45“)
For Each Zelle In Bereich.SpecialCells(xlCellTypeBlanks)
Zelle = Zelle.Offset(0, -1)
Next Zelle
End Sub

Das füllt mir jetzt aber den kompletten Bereich aus. Ich möchte aber, dass mir nur die Zellen bis zur letzten gefüllten Zelle ausgefüllt werden, also bis B7. Kann mir wer helfen?

Salve

Vorschlag für ein Ausfüllen im markierten Bereich

Sub Leerzellen()
Dim Bereich As Range, Zelle As Range
Set Bereich = Selection
For Each Zelle In Bereich.SpecialCells(xlCellTypeBlanks)
Zelle = Zelle.Offset(-1, 0)
Next Zelle
End Sub

Dein offset Befehl geht eine Spalte nach links.
Der erste Wert ist für die Zeilen

Danke für die schnelle Hilfe, habs folgendermaßen gelöst:

Sub Leerzellen()
Dim Bereich As Range, Zelle As Range
letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Set Bereich = Range(Cells(4, 2), Cells(letztezeile, 2))
For Each Zelle In Bereich.SpecialCells(xlCellTypeBlanks)
Zelle = Zelle.Offset(-1, 0)
Next Zelle
End Sub

Hab jetzt ein neues Problem. Besser gesagt 2.

Wenn ich das Makro ausführe und nur in B4 einen Wert habe (B3 ist die Spaltenüberschrift) kriege ich einen Anwendungs- oder objektdefinierten Fehler. Ich vermute mal dass das damit zusammenhängt, dass ich durch das Offset aus meiner Range rauskomme?

Der zweite Fehler tritt auf, wenn die Zellen aufgefüllt wurden, also ich habe von B4:B8 Werte habe und das Makro ausführe. Dann bekomme ich folgende Fehlermeldung: Keine Zellen gefunden. Wie kann ich den Fehler abfangen?

Nikolaus grüsst Nikodem

Ich hoffe, ich habe Dich richtig verstanden. Ich habe ein Makro, das im Bereich B4:B45 folgendes macht:

  • Wenn B4 leer ist, geschieht gar nichts.
  • Leere Zellen ab B5 bis zur nächsten „gefüllten“ Zelle werden mit dem Inhalt der darüber liegenden Zelle gefüllt, so wie Du es ganz oben gesagt hast: „Ich möchte aber, dass mir nur die Zellen bis zur letzten gefüllten Zelle ausgefüllt werden, also bis B7.“
  • Weitere leere Zellen unter B7 (um bei Deinem Beispiel zu bleiben) werden nicht bearbeitet und bleiben leer.
Sub LeerzellenVers2()
Dim Bereich As Range, Zelle As Range
Dim ez, anzz, zr, i
On Error GoTo finis
Set Bereich = Range("B4:B45")
ez = Bereich.Row    ' erste Zeile im Bereich
anzz = Bereich.Rows.Count   ' Anzahl Zeilen im Bereich
For Each Zelle In Bereich
    If IsEmpty(Zelle) Then
        zr = Zelle.Row
            If zr = ez Then Exit Sub
        Exit For
    End If
Next Zelle
For i = zr To anzz + ez - 1
    If IsEmpty(Cells(i, 2)) Then
        Cells(i, 2) = Cells(i - 1, 2)
    Else
        Exit Sub
    End If
Next i
finis:
End Sub

Ich bin gespannt auf Deine Reaktion! Niclaus

Hallo Nikolaus,

dein Code hat nur bedingt funktioniert, da er mir die komplette Range ausgefüllt hat und nicht nur bis zum letzten Wert. Mit deinem Code konnte ich meinen aber so umfunktionieren, dass er nun funktioniert. Vielen Dank dafür

Sub Leerzellen_Spalte_B()
Dim Bereich As Range, Zelle As Range
letztezeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Set Bereich = Range(Cells(4, 2), Cells(letztezeile, 2))
ez = Bereich.Row
If letztezeile = ez Then Exit Sub ’ wenn letzte Zeile gleich die erste Zeile, dann verlasse den SUB
On Error GoTo finish ’ wenn zwischen letzter und erster Zeile keine Leerzellen sind, verlasse die Schleife
For Each Zelle In Bereich.SpecialCells(xlCellTypeBlanks)

        Zelle = Zelle.Offset(-1, 0)
    
Next Zelle

finish:
End Sub

Komischerweise wird xlCellTypeBlanks immer mit einer 4 gefüllt, auch wenn keine Leerzellen vorhanden sind, deswegen die Error Anweisung.