Hi
das .SpecialCells orientiert sich immer am Zellbereich, der aktiv verwendet wird.
welcher das ist, hängt von verschiedenen Faktoren ab. In der Regel ist das die letzte Zelle, die mit Inhalt gefüllt ist (Wert oder Formel) oder eine eigene, vom Spalten- oder Zeilenstandard abweichende Formatierung hat.
auch beim Einfügen und Löschen von Zellen kann es manchmal vorkommen, dass Excel auf dem maximal erreichten Wert "hängen bleibt", da hier das Motto gilt "lieber etwas zugroß, aber niemals zu klein"
wenn dein Tabellenblatt in Zeile 4046 endet, aber das .SpecialCells noch Zeilen berücksichtigt, die weit darunterliegen, solltest du mal schauen, woran das liegt und ggf. die überzähligen Zellen löschen.
Das spart zum einen Speicherplatz, weil dann weniger Zellen gespeichert werden, zum anderen kann es Rechenvorgänge beschleunigen, die einen SVerweis, Zählen- oder SummeWenns mit ganzen Spalten als Zellbereich enthalten, da diese Funktionen dann immer nur den aktiven Zellbereich verwenden.
ansonsten Lösung wie von Onur gezeigt.
kleiner tipp noch:
dein Code:
Columns("B:B").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
lässt sich so zu einer zeile zusammenfassen:
Columns("B:B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
es lohnt sich immer, den vom Recorder aufgezeichneten Code in dieser Weise zu überarbeiten.
Gruß Daniel