🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA AutoFill in Excel — eine Serie oder Formel füllen ohne die Destination-Falle

|

VBA AutoFill in Excel — eine Serie oder Formel füllen ohne die Destination-Falle

TL;DRsource.AutoFill Destination, Type dehnt ein Muster aus; es ist keine Kopie. Zwei Regeln retten Sie: Die Destination muss die Source enthaltenRange("A1").AutoFill Destination:=Range("A1:A10") (A1 liegt innerhalb A1:A10); den Seed auszuschließen wirft run-time error 1004. Und der Type entscheidet, ob Sie eine Serie (xlFillSeries → 1, 2, 3) oder eine Kopie (xlFillCopy → 1, 1, 1) bekommen; der Standard xlFillDefault rät. Wollen Sie nur eine Zelle eine Spalte hinunter kopieren, ist Range("B2:B1000").FillDown einfacher, 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