Leeren Zellen mit dem obenstehenden Wert befüllen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von desisut.

    Leeren Zellen mit dem obenstehenden Wert befüllen

    Hallo zusammen

    Ich erhalte aus einer Applikation leider unvollständige Auswertungen. Es wird jeweils nur eine Zelle mit den Benutzerdaten befüllt. Die nachstehenden Zellen sind dann leer, obwohl diese auch zu diesem Benutzer gehören. Ich möchte nun, dass alle leeren Zellen mit dem obenstehenden Wert befüllt werden, bis sich der Wert ändert. Danach wird der neue Wert in die darunter stehenden Zellen hinterlegt.

    Ich konnte ein Makro "programmieren" was auch funktioniert - leider nur in der Spalte A. Was habe ich vergessen, um das gesamte Tabellenblatt in Excel zu berücksichtigen? Vielen lieben Dank für die Antwort.

    Sub test2()
    Dim i As Integer
    For i = 2 To 3000
    If Cells(i, 1) <> "" Then
    If Cells(i, 1).Value <> "" Then
    End If
    If Cells(i + 1, 1).Value = "" Then Cells(i + 1, 1).Value = Cells(i, 1).Value
    End If
    Next i
    End Sub

    Du kannst das Worksheet_Changed-Event abfangen, prüfen ob eine Masterzelle von den Änderungen betroffen sind und dann ein entsprechendes FillDown anstoßen.

    Wenn du deine halbmanuelle Methode verwenden willst kannst du eine zweite innere Schleife über alle Spalten machen.

    Oder du befüllst alle Zellen mit entsprechenden Formeln, die sich auf die erste Zeile beziehen.
    Dann benötigst du überhaupt kein VBA, sondern Excel macht das Verändern selbst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    desisut schrieb:

    wie ich eine zweite innere Schleife über alle Spalten mache?
    Ungefähr so:

    Visual Basic-Quellcode

    1. Sub test2()
    2. Dim r As Long, c As Integer
    3. For r = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    4. For c = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
    5. If IsEmpty(Cells(r, c)) Then Cells(r, c).Value = Cells(r, 1).Value
    6. Next
    7. Next
    8. End Sub

    Aber wie gesagt, das ist die uneleganteste der von mir vorgeschlagenen Methoden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja, die Spalte A habe ich nicht berücksichtigt.
    Die habe ich zur Berechnung der Zeilenanzahl herangenommen.
    Irgendwoher muss doch diese Information auch kommen.

    Ich habe ja keine Ahnung, wie dein Sheet aussieht bzw. aussehen soll.
    Da solltest du vielleicht eine belastbare Aufgabenstellung schreiben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Werde ich mir für das nächste Mal merken. Habe es jetzt herausgefunden! =)

    Sub ZeilenKopieren()
    Dim i As Integer
    Dim endrow As Integer
    endrow = ActiveSheet.UsedRange.Rows.Count - 1
    For i = 2 To endrow
    If Cells(i, 1).Value <> "" Then
    End If
    If Cells(i + 1, 1).Value = "" Then Range(Cells(i + 1, 1), Cells(i + 1, 11)).Value = Range(Cells(i, 1), Cells(i, 11)).Value
    Next i
    End Sub