jain *g
Hallo Kristian,
ja, ich sah die Anfrage so wie du.
Reinhard will im Prinzip das gleiche machen wie ich,
allerdings bezieht er sich nur auf das Kopieren der reinen
Zellen-Werte, und das ist was anderes als „unten ausfüllen“,
weil bei letzterem z.B. noch die Formatierung mitgenommen
wird.
Kein Problem, habs von Kopierren auf „unten ausfüllen“ umgestellt, siehe die beiden Makros.
Allerdings funktioniert seine Variante sowieso nicht:
Sehe ich aber nicht so
(okay A1:A65536 war ein Schreib/Denkfehler, aber mit A65536 klappts )
- Ich weiss z.B. nicht recht, was er mit dem
„Range(„A1:A65536“).End(xlUp).Row“ bewerkstelligen will. Es
führt in jedem Falle zum Ergebnis „1“.
- Dann läuft das Makro so lange, bis alle 65536 Zeilen
ausgefüllt sind, wenn ich das richtig sehe, und dürfte am Ende
mit einem Laufzeitfehler aussteigen. Nicht sehr komfortabel.
„Range(„A65536“).End(xlUp).Row“ ergibt die letzte (von oben gesehen) nichtleere Zelle in A. Es gibt glaub ich nur dann einen Fehler wenn A65536 nichtleer ist, aber das ist nicht zu erwarten im Normalfall.
Ggfs könnte man das ja vorher abprüfen.
Von der reinen Logik her, wäre „Range(„A1“).End(xldown).Row“ zielgerichteter und besser zu verstehen, aber es hüpft zur ersten Zelle die von einer leeren Zelle gefolgt wird und ist somit bei unzusammenhängenden Spalten unbrauchbar.
- Nicht komfortabel ist auch, dass man sich auf die Spalte A
festlegt und dort auch nicht festlegen kann, um welche Zeilen
es geht.
Naja, man kann ja die Spalte im makro ändern.
Siehe unten die beiden Makros, das erste ist auf Spalte A gerichtet, das Zweite wertet die vorher markiereten Zellen aus.
„um welche Zeilen“ ? , verstehe ich jetzt nicht ganz, das Makro geht Spalte A (oder im anderen Makro die Selection) Zelle für Zelle durch und wenn die Zelle leer ist füllt sie die Zelle mit dem Wert von obendrüber. Ja, Makro2 funktioniert auch bei mehrspaltigen Markierungen.
Mein Makro ist zwar etwas länger, dafür aber robust und
einfach zu bedienen.
Ja.
Gruß
Reinhard
Sub test1()
With Worksheets("Tabelle1")
For x = 2 To .Range("A65536").End(xlUp).Row
If .Cells(x, 1) = "" Then Range(.Cells(x, 1), .Cells(x - 1, 1)).FillDown
Next x
End With
End Sub
Sub test2()
For Each Zelle In Selection
If Zelle.Row \> Selection.Row And Zelle.Value = "" Then
Range(Zelle.Offset(-1, 0), Zelle).FillDown
End If
Next Zelle
End Sub