HERBERS Excel-Forum - das Archiv
Automatisches Auffüllen Zellen
Robert

Liebe Forumsleser,
Ich kämpfe gerade mit einem Excel File und würde gerne das Problem mit einem Makro Lösung:
Ich habe folgenden File:
A B
Firma MS 1 1:03:31
Firma MS 2
Firma MS 3
Firma MS 4
Firma MS 5
Allgemein 1
Firma SS 1 0:02:01
Allgemein 2
Firma SS 2 1:45:57
Allgemein 3
Firma SS 4 0:01:31
Algemein 1
usw.
Jetzt hätte ich gerne, dass in der Reihe B, die jeweilige Zeitdauer auf die unteren leeren Zellen übernommen wird, bis eine neue Zeitdauer bereits angegeben ist. Weiss hier einer Rat wie man das schnell hinkriegen kann, das File ist über 1000 Zeilen lang.
Vielen Vielen Dank im Voraus für die Unterstützung!!
Robert

AW: Automatisches Auffüllen Zellen
Petra

Hi Robert
Sub Leerzell_auffüllen()
Range("B1:B20").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
End Sub
Range mußt Du anpassen.
Hilfts?
Grüße Petra
AW: Automatisches Auffüllen Zellen
Robert

VIelen Dank Petra! Das hat super geklappt!
AW: Automatisches Auffüllen Zellen
David

Hallo Robert,
hier eine Variante, die ich selbst verwendet, mit variabler Eingabe des betreffendes Bereichs:
Sub fill_lines()
Dim first_line As Integer
Dim last_line As Integer
Dim spalte_AN As String
Dim spalte_BN As String
Dim spalte_N As Byte
Dim spalte_O As Byte
first_line = CInt(0 & InputBox("erste Zeile?", , 2))
last_line = CInt(0 & InputBox("letzte Zeile?", , ActiveSheet.UsedRange.Rows.Count))
spalte_AN = InputBox("Spalte von?", , "a")
spalte_BN = InputBox("Spalte bis?", , "a")
If first_line <= 1 Then first_line = 2
If last_line = 0 Then last_line = Range(spalte_AN & "65536").End(xlUp).Row
If spalte_AN = "" Then spalte_AN = "a"
If spalte_BN = "" Then spalte_BN = spalte_AN
spalte_N = Asc(spalte_AN)
If spalte_N < 91 And spalte_N > 64 Then
spalte_N = spalte_N - 64
ElseIf spalte_N < 123 And spalte_N > 96 Then
spalte_N = spalte_N - 96
Else:
MsgBox ("falsche Eingabe, nur Buchstaben von A-Z (a-z) erlaubt")
Exit Sub
End If
spalte_O = Asc(spalte_BN)
If spalte_O < 91 And spalte_N > 64 Then
spalte_O = spalte_O - 64
ElseIf spalte_O < 123 And spalte_O > 96 Then
spalte_O = spalte_O - 96
Else:
MsgBox ("falsche Eingabe, nur Buchstaben von A-Z (a-z) erlaubt")
Exit Sub
End If
For Zeile = first_line To last_line
For Spalte = spalte_N To spalte_O
'Cells(Zeile, spalte_N).Select
If Cells(Zeile, Spalte).Value = "" Then
Cells(Zeile, Spalte).Value = Cells(Zeile - 1, Spalte).Value
End If
Next
Next
End Sub
Im Unterschied zur Variante von Petra werden hier die Leerzellen mit dem tatsächlichen Wert gefüllt und nicht mit dem Verweis auf die vorherige Zelle (also einer Formel).
Gruß
David
AW: Automatisches Auffüllen Zellen
Petra

Hi David
hier kürzer:
Sub leervoll()
Dim z
For Each z In Range("b1:b20")
If z = "" Then
z.Value = z.Offset(-1, 0)
End If
Next
End Sub
da sind dann auch Werte drin
und den Rangebereich kannst Du auch noch automatisieren,wenn Du willst
Grüße Petra
AW: Automatisches Auffüllen Zellen
David

Hallo Petra,
nun soviel kürzer als der Kern meines Codes ist das auch nicht:
For Zeile = first_line To last_line
For Spalte = spalte_N To spalte_O
If Cells(Zeile, Spalte).Value = "" Then Cells(Zeile, Spalte).Value = Cells(Zeile - 1,  _
Spalte).Value
Next
Next
Sind auch nur 5 Zeilen, wenn auch mit ein paar mehr Zeichen. ;-)
Der Rest ist ja nur die variable Eingabe des Ranges und das Abfangen von Fehlern.
Gruß
David
AW: Automatisches Auffüllen Zellen
Petra

Hi David
dann lassen wir halt den Excel-Profi entscheiden, wenn er sich denn zurückmeldet!
Schönes Wochenende
Petra
dito...
David