TL;DR —
source.AutoFill Destination, Typedehnt ein Muster aus; es ist keine Kopie. Zwei Regeln retten Sie: DieDestinationmuss die Source enthalten —Range("A1").AutoFill Destination:=Range("A1:A10")(A1 liegt innerhalb A1:A10); den Seed auszuschließen wirft run-time error 1004. Und derTypeentscheidet, ob Sie eine Serie (xlFillSeries→ 1, 2, 3) oder eine Kopie (xlFillCopy→ 1, 1, 1) bekommen; der StandardxlFillDefaulträt. Wollen Sie nur eine Zelle eine Spalte hinunter kopieren, istRange("B2:B1000").FillDowneinfacher, als mit AutoFill zu kämpfen.
' Serie: den ersten Wert (oder die ersten zwei) setzen, dann ausdehnen
Range("A1").Value = 1
Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries ' 1..10
' Formel eine Spalte hinunter: relative Refs passen sich pro Zeile an
Range("B2").Formula = "=A2*1.2"
Range("B2").AutoFill Destination:=Range("B2:B1000")
' Einfach die oberste Zelle hinunterkopieren - keine Destination-Gymnastik
Range("B2:B1000").FillDown
AutoFill ist die Code-Version des Ziehens am Ausfüllkästchen, und die Leute erwarten, dass es sich wie
Kopieren verhält — also sind sie überrascht, wenn es aus 1 ein 1, 2, 3, 4 macht, und ratlos, wenn ein
Schnipsel ohne ersichtlichen Grund 1004 wirft. Beides ergibt Sinn, sobald Sie die Kernidee festhalten:
AutoFill setzt ein Muster von einem Seed aus über eine Destination fort, die diesen Seed enthalten
muss. Kopieren wiederholt; AutoFill erzeugt. Bringen Sie Destination und Type in Ordnung, und es ist
der sauberste Weg, eine Serie zu legen oder eine Formel eine Spalte hinunterzuschieben.
Was Sie lernen
- Das mentale Modell — AutoFill dehnt ein Muster aus, es kopiert nicht
- Die Destination-Regel — die Source muss innerhalb der Destination liegen, sonst 1004
Type— Serie gegenüber Kopie, und warum die Standard-Vermutung unzuverlässig ist- Eine Formel hinunterfüllen, sodass sich ihre Referenzen pro Zeile anpassen
- Wann
FillDown/FillRight(oder ein Array) AutoFill schlagen
Das mentale Modell: AutoFill dehnt ein Muster aus
Kopieren nimmt einen Wert und wiederholt ihn. AutoFill nimmt einen Seed — die erste Zelle oder die
ersten zwei — und setzt fort, welches Muster es auch erkennt: Eine Zahl wird zu einer Reihe, 1, 2 wird
zu einer arithmetischen Serie, Jan wird zu den Monaten, ein Datum wird zu aufeinanderfolgenden Tagen.
Deshalb existiert es als etwas Getrenntes von Copy:
Range("A1").Value = 5
Range("A1").AutoFill Destination:=Range("A1:A5"), Type:=xlFillCopy ' 5, 5, 5, 5, 5
Range("C1").Value = 5
Range("C1").AutoFill Destination:=Range("C1:C5"), Type:=xlFillSeries ' 5, 6, 7, 8, 9
Gleicher Seed, gleiche Destination — anderer Type, völlig anderes Ergebnis. Sobald Sie AutoFill als
Generator sehen, der einen Seed liest und ein Muster erzeugt, hören die zwei Regeln unten auf, willkürlich
zu sein: Der Seed muss Teil dessen sein, was Sie füllen, und Sie müssen ihm sagen, welches Muster Sie
meinen.
Die Destination-Regel: die Source muss innerhalb der Destination liegen
Das ist der AutoFill-Bug, der jeden Anfänger stoppt: Der Destination-Range muss den Source-Range
enthalten. Die Source ist der Seed, und der Seed ist der erste Teil des Füllens.
' FALSCH - Destination schliesst den Seed aus -> run-time error 1004
Range("A1").AutoFill Destination:=Range("A2:A10")
' RICHTIG - Destination enthaelt A1, den Seed
Range("A1").AutoFill Destination:=Range("A1:A10")
Denken Sie es als „fülle A1 bis A10", nicht „fülle A1 in A2:A10". Die Seed-Zeile ist der Ort, an dem
das Muster beginnt, sie lebt also oben in der Destination. Mehrzellige Seeds funktionieren genauso —
seeden Sie A1:A2 mit 1 und 2, dann AutoFill Destination:=Range("A1:A100"), und Excel liest den
Schritt aus den zwei Seed-Zellen. Fast jede „AutoFill wirft 1004"-Frage ist eine Destination, die vergaß,
die Source einzuschließen.
Type: Serie gegenüber Kopie, und der unzuverlässige Standard
Lassen Sie Type weg, bekommen Sie xlFillDefault, das Excel aus dem Seed raten lässt — eine einzelne
Zahl kopiert, 1, 2 macht eine Serie, Mon macht Wochentage. Bequem in der Oberfläche, riskant im Code,
weil Ihre Absicht nicht festgeschrieben ist und die Vermutung umschlagen kann. Benennen Sie den Type:
| Sie wollen | Type |
|---|---|
| 1, 2, 3, … | xlFillSeries |
| 1, 1, 1, … | xlFillCopy |
| Mo, Di, Mi (Wochenenden überspringen) | xlFillWeekdays |
| Aufeinanderfolgende Tage / Monate / Jahre | xlFillDays / xlFillMonths / xlFillYears |
| Nur Formatierung | xlFillFormats |
| Werte ohne Formatierung | xlFillValues |
Range("A1").Value = Date
Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillMonths ' Monat fuer Monat
Die Regel ist einfach: Wenn das Muster zählt, benennen Sie es. Sich auf xlFillDefault zu verlassen,
ist der Weg, ein kopiertes 1, 1, 1 zu bekommen, wo Sie 1, 2, 3 wollten, oder eine schrittweise Serie,
wo Sie eine Wiederholung wollten.
Eine Formel eine Spalte hinunterfüllen
Der nützlichste alltägliche AutoFill ist, eine Formel eine Spalte hinunterzuschieben. Füllen Sie eine Formel, und ihre relativen Referenzen passen sich pro Zeile an, genau wie beim Ziehen am Ausfüllkästchen:
Range("B2").Formula = "=A2*C2"
Range("B2").AutoFill Destination:=Range("B2:B1000") ' B3 wird =A3*C3, B4 =A4*C4, ...
xlFillDefault behandelt das für Formeln korrekt, sodass Sie hier selten Type angeben müssen. Das ist
das idiomatische „diese Formel auf die ganze Spalte anwenden", und es ist der Grund, warum AutoFill seinen
Platz verdient, obwohl FillDown existiert — AutoFill kann eine echte Serie seeden und ausdehnen, was
eine schlichte Kopie nicht kann. Wenn Sie die Formel lieber einmal schreiben und sich ohne das
Ausfüllkästchen-Modell anpassen lassen, erledigt .FormulaR1C1 dieselbe Aufgabe; siehe
VBA Formula.
Wann FillDown, FillRight oder ein Array AutoFill schlagen
AutoFill ist eine Muster-Maschine. Wenn Sie kein Muster erzeugen — Sie wollen nur die oberste Zelle nach unten oder quer wiederholt —, sind die einfacheren Werkzeuge klarer und sparen die Destination-enthält-Source-Zeremonie:
Range("B2:B1000").FillDown ' B2 den ganzen Range hinunterkopieren
Range("B2:Z2").FillRight ' B2 quer ueber die ganze Zeile kopieren
FillDown und FillRight nehmen keinen Type und keine separate Destination — der Range, auf dem Sie
sie aufrufen, ist das Füllen, oberste Zelle als Seed. Für eine reine numerische Serie ohne Formeln ist
es noch schneller, ein Variant-Array in einer einzigen Zuweisung in den Range
zu schreiben, was die Arbeitsblatt-Operation ganz vermeidet. Meine Regel: Greifen Sie nur dann zu
AutoFill, wenn Sie Excels Muster-Maschine brauchen — eine echte Serie, Wochentage, benutzerdefinierte
Listen — und nutzen Sie FillDown / FillRight oder ein Array für eine schlichte Kopie. Für große
Füllungen schalten Sie zuerst Neuberechnung und Bildschirmaktualisierung ab; siehe
VBA Calculation und VBA ScreenUpdating.
Wie ExcelMaster hilft
Die AutoFill-Fehler, die Zeit verschwenden, sind vorhersehbar: die Destination, die den Seed ausschließt
und 1004 wirft, der fehlende Type, der kopierte, wo Sie eine Serie wollten, und der Kampf mit
AutoFill für eine Aufgabe, die in Wahrheit ein einzeiliges FillDown war. Keiner davon ist schwer,
sobald Sie sie kennen — sie sind nur leicht aus dem Gedächtnis falsch zu machen.
ExcelMaster wählt das richtige
Werkzeug für die Form der Aufgabe. Bitten Sie es, „diese Zeilen von 1 bis 500 zu nummerieren", und es
seedet und dehnt eine Serie aus, mit der Destination, die den Seed einschließt; bitten Sie es, „diese
Formel bis zur letzten Zeile hinunterzukopieren", und es nutzt FillDown gegen die UsedRange statt einer
brüchigen hart verdrahteten Höhe. Es benennt den Type, sodass die Absicht auf der Seite steht, und es
fällt auf ein schlichtes Array-Schreiben zurück, wenn Sie nur Werte brauchen. Sie beschreiben das Muster;
es legt es hin, ohne die 1004.
Häufig gestellte Fragen
Wie nutze ich AutoFill in VBA?
Rufen Sie AutoFill auf dem Seed-Range auf und übergeben Sie eine Destination, die den Seed
einschließt: Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries. Der Seed ist der
erste Wert oder die ersten zwei, die Destination ist der ganze zu füllende Range (Seed eingeschlossen),
und Type sagt, ob eine Serie ausgedehnt oder kopiert wird. Setzen Sie zuerst die Seed-Zelle, dann rufen
Sie AutoFill auf.
Warum bekomme ich run-time error 1004 bei AutoFill?
Fast immer, weil die Destination die Source nicht enthält. Range("A1").AutoFill Destination:=Range("A2:A10") schließt den Seed A1 aus und wirft 1004; nutzen Sie stattdessen
Range("A1:A10"), damit der Seed oben in der Destination sitzt. Lesen Sie es als „fülle A1 bis A10",
nicht „fülle A1 in A2:A10".
Was ist der Unterschied zwischen AutoFill und FillDown in VBA?
FillDown kopiert die oberste Zelle eines Range den ganzen Range hinunter — kein Type, keine separate
Destination, nur Range("B2:B1000").FillDown. AutoFill dehnt ein Muster von einem Seed aus und
braucht eine Destination, die den Seed einschließt. Nutzen Sie FillDown (oder FillRight) für eine
schlichte Kopie und AutoFill, wenn Sie eine echte Serie wie 1, 2, 3 oder die Monate brauchen.
Wie fülle ich eine Formel mit AutoFill eine Spalte hinunter in VBA?
Schreiben Sie die Formel in die Seed-Zelle, dann füllen Sie sie mit AutoFill hinunter:
Range("B2").Formula = "=A2*C2", gefolgt von Range("B2").AutoFill Destination:=Range("B2:B1000"). Die
relativen Referenzen passen sich pro Zeile an, sodass B3 zu =A3*C3 wird. Für Formeln können Sie Type
weglassen. Range("B2:B1000").FillDown erledigt dasselbe einfacher.
Wie fülle ich eine Serie von Datumsangaben oder Monaten mit AutoFill?
Seeden Sie das erste Datum und übergeben Sie einen Datums-Type: Range("A1").Value = Date, dann
Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillDays für aufeinanderfolgende Tage, oder
xlFillMonths / xlFillWeekdays / xlFillYears für jene Schritte. Den Type zu benennen vermeidet, sich
auf xlFillDefault zu verlassen, um das Muster aus dem Seed zu raten.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 01.09.2026.
Verwandte Anleitungen: VBA Cell Value · VBA Formula · VBA Copy Paste · VBA Range · VBA ScreenUpdating
