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

VBA AutoFill en Excel — rellena una serie o una fórmula sin la trampa de Destination

|

VBA AutoFill en Excel — rellena una serie o una fórmula sin la trampa de Destination

TL;DRsource.AutoFill Destination, Type extiende un patrón; no es una copia. Dos reglas te salvan: el Destination debe incluir el origenRange("A1").AutoFill Destination:=Range("A1:A10") (A1 está dentro de A1:A10); excluir la semilla lanza el error 1004 de tiempo de ejecución. Y el Type decide si obtienes una serie (xlFillSeries → 1, 2, 3) o una copia (xlFillCopy → 1, 1, 1); el xlFillDefault por defecto adivina. Si solo quieres copiar una celda hacia abajo por una columna, Range("B2:B1000").FillDown es más sencillo que pelearte con AutoFill.

' Serie: siembra el primer valor (o dos), luego extiende
Range("A1").Value = 1
Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries  ' 1..10

' Formula hacia abajo por una columna: las refs relativas se ajustan por fila
Range("B2").Formula = "=A2*1.2"
Range("B2").AutoFill Destination:=Range("B2:B1000")

' Solo copia la celda de arriba hacia abajo - sin gimnasia de Destination
Range("B2:B1000").FillDown

AutoFill es la versión en código de arrastrar el controlador de relleno, y la gente espera que se comporte como una copia — así que se sorprende cuando convierte 1 en 1, 2, 3, 4, y se queda perpleja cuando un fragmento lanza 1004 sin motivo aparente. Las dos cosas cobran sentido en cuanto tienes clara la idea central: AutoFill continúa un patrón a partir de una semilla por un destino que debe contener esa semilla. Copiar repite; AutoFill genera. Acierta con el destino y el tipo y es la forma más limpia de estampar una serie o empujar una fórmula hacia abajo por una columna.

Lo que aprenderás

  • El modelo mental — AutoFill extiende un patrón, no copia
  • La regla del destino — el origen debe estar dentro del destino, o 1004
  • Type — serie frente a copia, y por qué la suposición por defecto no es fiable
  • Rellenar una fórmula hacia abajo para que sus referencias se ajusten por fila
  • Cuándo FillDown / FillRight (o una matriz) le ganan a AutoFill

El modelo mental: AutoFill extiende un patrón

Copiar toma un valor y lo repite. AutoFill toma una semilla — la primera celda o las dos primeras — y continúa el patrón que detecte: un número se convierte en una secuencia, 1, 2 se convierte en una serie aritmética, Jan se convierte en los meses, una fecha se convierte en días consecutivos. Por eso existe como algo aparte de 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

La misma semilla, el mismo destino — un Type distinto, un resultado completamente distinto. En cuanto ves AutoFill como un generador que lee una semilla y produce un patrón, las dos reglas de abajo dejan de ser arbitrarias: la semilla tiene que formar parte de lo que rellenas, y tienes que decirle qué patrón quieres.

La regla del destino: el origen debe estar dentro del destino

Este es el bug de AutoFill que frena a todo principiante: el rango Destination debe contener el rango de origen. El origen es la semilla, y la semilla es la primera parte del relleno.

' MAL - el destino excluye la semilla -> error 1004 de tiempo de ejecucion
Range("A1").AutoFill Destination:=Range("A2:A10")

' BIEN - el destino incluye A1, la semilla
Range("A1").AutoFill Destination:=Range("A1:A10")

Piénsalo como «rellena A1 hasta A10», no «rellena A1 dentro de A2:A10». La fila de la semilla es donde empieza el patrón, así que vive en la parte de arriba del destino. Las semillas de varias celdas funcionan igual — siembra A1:A2 con 1 y 2, luego AutoFill Destination:=Range("A1:A100") y Excel lee el paso a partir de las dos celdas semilla. Casi toda pregunta del tipo «AutoFill lanza 1004» es un destino que se olvidó de incluir el origen.

Type: serie frente a copia, y la suposición por defecto poco fiable

Omite Type y obtienes xlFillDefault, que deja que Excel adivine a partir de la semilla — un número solo se copia, 1, 2 hace una serie, Mon hace días laborables. Cómodo en la interfaz, arriesgado en código, porque tu intención no queda por escrito y la suposición puede darse la vuelta. Nombra el tipo:

Quieres Type
1, 2, 3, … xlFillSeries
1, 1, 1, … xlFillCopy
Mon, Tue, Wed (salta fines de semana) xlFillWeekdays
Días / meses / años consecutivos xlFillDays / xlFillMonths / xlFillYears
Solo formato xlFillFormats
Valores sin formato xlFillValues
Range("A1").Value = Date
Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillMonths  ' mes a mes

La regla es sencilla: si el patrón importa, decláralo. Apoyarte en xlFillDefault es como acabas con un 1, 1, 1 copiado donde querías 1, 2, 3, o una serie escalonada donde querías una repetición.

Rellenar una fórmula hacia abajo por una columna

El AutoFill más útil del día a día es empujar una fórmula hacia abajo por una columna. Rellena una fórmula y sus referencias relativas se ajustan por fila, exactamente como arrastrar el controlador de relleno:

Range("B2").Formula = "=A2*C2"
Range("B2").AutoFill Destination:=Range("B2:B1000")   ' B3 pasa a ser =A3*C3, B4 =A4*C4, ...

xlFillDefault gestiona esto correctamente con las fórmulas, así que rara vez necesitas especificar Type aquí. Es el idiomático «aplica esta fórmula a toda la columna», y es la razón por la que AutoFill se gana su sitio aunque exista FillDown — AutoFill puede sembrar y extender una serie real, cosa que una copia simple no puede. Si prefieres escribir la fórmula una vez y dejar que se ajuste sin el modelo del controlador de relleno, .FormulaR1C1 hace el mismo trabajo; consulta VBA Formula.

Cuándo FillDown, FillRight, o una matriz le ganan a AutoFill

AutoFill es un motor de patrones. Cuando no estás generando un patrón — solo quieres la celda de arriba repetida hacia abajo o a lo ancho — las herramientas más sencillas son más claras y se saltan la ceremonia de que el destino incluya el origen:

Range("B2:B1000").FillDown        ' copia B2 hacia abajo por todo el rango
Range("B2:Z2").FillRight          ' copia B2 a lo ancho de toda la fila

FillDown y FillRight no llevan Type ni un Destination aparte — el rango sobre el que los llamas es el relleno, con la celda de arriba como semilla. Para una serie puramente numérica sin fórmulas, escribir una matriz Variant al rango en una sola asignación es aún más rápido y evita del todo la operación sobre la hoja. Mi regla: echa mano de AutoFill solo cuando necesitas el motor de patrones de Excel — una serie real, días laborables, listas personalizadas — y usa FillDown / FillRight o una matriz para una copia simple. Para rellenos grandes, desactiva primero el recálculo y la actualización de pantalla; consulta VBA Calculation y VBA ScreenUpdating.

Cómo ayuda ExcelMaster

Los errores de AutoFill que hacen perder tiempo son predecibles: el destino que excluye la semilla y lanza 1004, el Type que falta y copió cuando querías una serie, y la pelea con AutoFill para un trabajo que en realidad era un FillDown de una línea. Ninguno es difícil una vez que los conoces — solo que es fácil equivocarse de memoria.

ExcelMaster elige la herramienta adecuada para la forma del trabajo. Pídele «numera estas filas del 1 al 500» y siembra y extiende una serie con el destino incluyendo la semilla; pídele «copia esta fórmula hacia abajo hasta la última fila» y usa FillDown contra el rango usado en lugar de una altura frágil codificada a mano. Declara el Type para que la intención esté sobre el papel, y baja a una escritura de matriz simple cuando solo necesitas valores. Tú describes el patrón; él lo estampa sin el 1004.

Preguntas frecuentes

¿Cómo uso AutoFill en VBA?

Llama a AutoFill sobre el rango semilla y pasa un Destination que incluya la semilla: Range("A1").AutoFill Destination:=Range("A1:A10"), Type:=xlFillSeries. La semilla es el primer valor o los dos primeros, el Destination es todo el rango a rellenar (semilla incluida), y Type dice si extender una serie o copiar. Fija primero la celda semilla, luego llama a AutoFill.

¿Por qué me da el error 1004 de tiempo de ejecución con AutoFill?

Casi siempre porque el Destination no contiene el origen. Range("A1").AutoFill Destination:=Range("A2:A10") excluye la semilla A1 y lanza 1004; usa Range("A1:A10") en su lugar para que la semilla quede en la parte de arriba del destino. Léelo como «rellena A1 hasta A10», no «rellena A1 dentro de A2:A10».

¿Cuál es la diferencia entre AutoFill y FillDown en VBA?

FillDown copia la celda de arriba de un rango hacia abajo por todo el rango — sin Type, sin un Destination aparte, solo Range("B2:B1000").FillDown. AutoFill extiende un patrón a partir de una semilla y necesita un Destination que incluya la semilla. Usa FillDown (o FillRight) para una copia simple, y AutoFill cuando necesitas una serie real como 1, 2, 3 o los meses.

¿Cómo relleno una fórmula hacia abajo por una columna con AutoFill en VBA?

Escribe la fórmula en la celda semilla, luego rellénala hacia abajo con AutoFill: Range("B2").Formula = "=A2*C2" seguido de Range("B2").AutoFill Destination:=Range("B2:B1000"). Las referencias relativas se ajustan por fila, así que B3 pasa a ser =A3*C3. Puedes omitir Type con las fórmulas. Range("B2:B1000").FillDown hace lo mismo de forma más sencilla.

¿Cómo relleno una serie de fechas o meses con AutoFill?

Siembra la primera fecha y pasa un Type de fecha: Range("A1").Value = Date y luego Range("A1").AutoFill Destination:=Range("A1:A31"), Type:=xlFillDays para días consecutivos, o xlFillMonths / xlFillWeekdays / xlFillYears para esos pasos. Nombrar el tipo evita depender de que xlFillDefault adivine el patrón a partir de la semilla.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 01/09/2026.

Guías relacionadas: VBA Cell Value · VBA Formula · VBA Copy Paste · VBA Range · VBA ScreenUpdating