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

VBA AutoFit en Excel — ajusta columnas y filas a su contenido de la forma correcta

|

VBA AutoFit en Excel — ajusta columnas y filas a su contenido de la forma correcta

TL;DRAutoFit mide el contenido que existe en el momento en que se ejecuta y hornea un tamaño fijo. Es una instantánea, no una regla viva: añade luego un valor más largo y la columna vuelve a quedar recortada. Por eso va en la última línea de tu macro, después de cada escritura. Usa Columns("A:D").AutoFit para el ancho y Rows("1:100").AutoFit para el alto; cuando partes de un rango parcial, pasa por .EntireColumn o solo ajustas a una fila. Las celdas combinadas derrotan en silencio al AutoFit de fila — esa es la razón número uno de que «no haga nada».

' AutoFit mide lo que hay AHORA, asi que ejecutalo DESPUES de escribir los datos.
Columns("A:D").AutoFit          ' ajusta esas columnas a su valor mas largo actual
Rows("1:100").AutoFit           ' ajusta esas filas (solo crece con texto ajustado o alto)
Cells.EntireColumn.AutoFit      ' ajusta cada columna usada de la hoja en una linea

' Empiezas desde un rango parcial? Ensancha la columna entera, no solo el rango:
Range("A1:D1").EntireColumn.AutoFit

AutoFit es la versión en código de hacer doble clic en el borde entre dos encabezados de columna — el gesto que ajusta una columna para que encaje exactamente su celda más ancha. Es una de las líneas más usadas en cualquier macro que construye informes, y también una de las peor entendidas, porque la gente la trata como un ajuste que sigue siendo correcto. No lo es. En cuanto la ves como una medición tomada en un solo instante, cada comportamiento raro — columnas recortadas, filas que no crecen, una llamada que parece no hacer nada — encaja en su sitio.

Lo que aprenderás

  • El modelo mental — AutoFit es una medición de una sola vez, no una regla que sigue reajustando
  • La regla que evita casi todos los fallos — ejecútalo el último, después de escribir los datos
  • Ancho frente a alto — por qué Columns.AutoFit siempre se mueve pero Rows.AutoFit a menudo no
  • Ajustar un rango parcial con .EntireColumn, y la hoja entera con Cells.EntireColumn.AutoFit
  • Por qué las celdas combinadas rompen en silencio el AutoFit de fila
  • Cuándo un ancho fijo que tú controlas gana a volver a ejecutar AutoFit

El modelo mental: una medición, no una regla

Imagina AutoFit como pasar una regla por el valor más largo actual de una columna y clavar el ancho a él. Esa es toda la idea — y la palabra clave es actual. AutoFit no instala una regla que diga «sé siempre lo bastante ancha». Lee las celdas una vez, fija un ancho, y se marcha. La columna es ahora una columna corriente de ancho fijo que resulta encajar los datos que había cuando mediste.

Por eso la queja clásica — «autoajusté la columna pero vuelve a estar recortada» — no es un fallo. Mediste, y luego los datos cambiaron. Una celda que más tarde recibe una cadena más larga, un número más grande o un formato de fecha más ancho desborda el ancho que clavaste, y Excel muestra ####. AutoFit hizo exactamente lo que le pediste; solo que preguntó por el pasado. Quédate con esto y el resto del artículo es de sentido común.

La regla que más importa: AutoFit se ejecuta el último

Como AutoFit mide el contenido actual, el error más común con diferencia es ejecutarlo antes de que el contenido exista:

Columns("A:D").AutoFit          ' MAL: las columnas siguen vacias - se ajusta a nada
' ... codigo que escribe encabezados y datos en A:D ...

Aquí la macro ajusta cuatro columnas vacías a un ancho de un pelo, luego las rellena, y todo queda recortado. El arreglo es una disciplina: AutoFit es lo último que una macro le hace a un rango, nunca lo primero. Escribe los encabezados, escribe los datos, aplica los formatos de número, y entonces AutoFit. Si una rutina escribe y da formato a la vez, pon la llamada a AutoFit justo al final para que mida el producto acabado. La misma regla vale dentro de un bucle de construcción — no hagas AutoFit de cada fila según la escribes; escribe todas las filas, y luego AutoFit del bloque una sola vez.

El ancho siempre se mueve; el alto a menudo no

Columns.AutoFit y Rows.AutoFit parecen simétricos pero se comportan distinto, y saber por qué te ahorra una tarde. El AutoFit de columna mide el ancho del valor más largo y casi siempre hay algo que ajustar, así que se mueve visiblemente cada vez. El AutoFit de fila mide el alto que el contenido necesita — y una celda normal de una sola línea necesita exactamente el alto predeterminado, así que el AutoFit de fila parece «no hacer nada».

El alto de fila solo crece cuando una celda es genuinamente más alta que una línea: texto con el ajuste activado, texto con un salto de línea duro (Chr(10)), o una fuente más grande. Esa es la conexión real entre AutoFit y Ajustar texto: activas el ajuste para que el texto se derrame en varias líneas dentro de un ancho de columna fijo, y entonces Rows.AutoFit tiene una forma más alta que medir y crece la fila para revelarlo. Haz AutoFit del alto de una fila sin ajuste y con un ancho fijo puesto, y seguirás preguntándote por qué no pasa nada.

Ajustar un rango parcial, y la hoja entera

AutoFit ensancha columnas, pero te deja llamarlo desde un rango — y eso es una trampa. Llamado sobre un rango parcial, ajusta las columnas usando solo las celdas de ese rango:

Range("A1:D1").AutoFit          ' ajusta A:D usando solo la fila 1 - casi siempre demasiado estrecho
Range("A1:D1").EntireColumn.AutoFit  ' ajusta A:D usando cada celda de esas columnas

La primera línea mide solo la fila de encabezado e ignora los datos de debajo, así que el resultado es casi siempre demasiado ajustado. Echa mano de .EntireColumn (o .EntireRow para los altos) siempre que tu punto de partida sea un bloque de celdas en vez de una columna entera. Para ajustar la hoja entera en una sola instrucción, usa Cells.EntireColumn.AutoFitCells sin argumentos es cada celda usada, y .EntireColumn lo eleva a cada columna que contiene datos. Es la pulcra línea única con la que terminan la mayoría de las macros de informe.

Donde AutoFit no hace nada en silencio: las celdas combinadas

El fallo más confuso no tiene nada que ver con que tu código esté mal. El AutoFit de fila ignora las filas que contienen celdas combinadas. Es una limitación de Excel de toda la vida: una celda combinada puede abarcar varias columnas, Excel no puede decidir qué columna debería absorber el alto, así que se niega a redimensionar la fila en absoluto. Activa el ajuste en una celda de título combinada, llama a Rows.AutoFit, y la fila se queda con el alto de una línea y el texto recortado — sin error, sin aviso.

Si un informe se apoya en celdas combinadas para los encabezados, no puedes fiarte del AutoFit de fila ahí; tienes que fijar un RowHeight explícito que calcules tú mismo, o evitar la combinación (una alineación horizontal de «centrar en la selección» da el aspecto sin la combinación). Esta es una razón más por la que las celdas combinadas dan más problemas de lo que valen en cualquier cosa que una macro tenga que mantener.

Cuándo un ancho fijo gana a AutoFit

AutoFit es perfecto para una instantánea final — has construido un informe, los datos están asentados, y quieres dimensionar cada columna una vez antes de entregarlo o exportarlo. Es la herramienta equivocada para una hoja viva. En un panel cuyos números se actualizan, volver a ejecutar AutoFit en cada cambio hace que las columnas salten de un lado a otro según los valores crecen y encogen, y hacer AutoFit de miles de columnas en cada edición es genuinamente lento. Ahí quieres una regla, no una instantánea: fija un ancho de columna que tú controlas (Columns("A:D").ColumnWidth = 14) para que el diseño se mantenga estable haga lo que haga el dato. El criterio es simple: AutoFit cuando el contenido está terminado y quieres que encaje una vez; fija un ancho fijo cuando el contenido sigue cambiando y quieres que el diseño aguante.

Cómo ayuda ExcelMaster

AutoFit parece trivial y luego te cuesta una tarde en silencio — la llamada está encima de la escritura en vez de debajo y ajusta columnas vacías, un rango parcial se ajusta solo a la fila de encabezado, o un título combinado se niega a crecer y el texto queda recortado en la copia que sale. Nada de esto lanza un error, así que te enteras cuando alguien ve ####.

ExcelMaster te deja decir lo que quieres — «ajusta cada columna a sus datos», «haz que esta columna de descripción se ajuste y crezca para encajar» — y escribe el AutoFit al final de la rutina, donde le corresponde, pasa por .EntireColumn cuando partes de un rango, empareja el ajuste con el AutoFit de fila para que el texto alto de verdad se vea, y te avisa cuando una celda combinada significa que AutoFit no puede hacer el trabajo. Tú conservas el libro y el código.

Preguntas frecuentes

¿Por qué no funciona mi AutoFit en VBA?

Casi siempre una de tres cosas. O ejecutaste AutoFit antes de escribir los datos, así que midió celdas vacías — mueve la llamada al final de la rutina. O lo llamaste sobre un rango parcial, así que ajustó las columnas solo a esas pocas celdas — usa .EntireColumn.AutoFit en su lugar. O la fila contiene una celda combinada, y el AutoFit de fila ignora las filas combinadas por diseño — fija ahí un RowHeight explícito en su lugar.

¿Cómo hago AutoFit de todas las columnas de una hoja en VBA?

Usa Cells.EntireColumn.AutoFit. Cells sin argumentos se refiere a cada celda usada, y .EntireColumn lo eleva a cada columna que contiene datos, así que la hoja entera se ajusta en una línea. Para las filas también, añade Cells.EntireRow.AutoFit. Para limitarlo a un bloque, nombra las columnas: Columns("A:H").AutoFit.

¿Cuál es la diferencia entre Columns.AutoFit y Rows.AutoFit?

Columns.AutoFit fija el ancho de cada columna a su valor más largo y se mueve visiblemente casi siempre. Rows.AutoFit fija el alto de cada fila al contenido que debe mostrar, pero una celda normal de una línea ya encaja en el alto predeterminado, así que solo cambia algo cuando una celda es más alta — texto ajustado, un salto de línea duro, o una fuente más grande. El alto de fila y el ajuste van de la mano.

¿Por qué AutoFit no cambia el alto de fila?

Porque el contenido todavía cabe en una línea. El alto de fila solo crece con contenido genuinamente alto. Activa WrapText = True (con un ancho de columna fijo para que el texto tenga algo contra lo que ajustar), o usa un salto de línea duro, y entonces llama a Rows.AutoFit. Si la fila contiene una celda combinada, AutoFit no la redimensionará en absoluto — esa es una limitación de Excel aparte.

¿Debo usar AutoFit o fijar un ancho de columna fijo?

AutoFit cuando los datos están terminados y quieres dimensionar cada columna una vez — un informe que estás a punto de exportar o entregar. Fija un ColumnWidth fijo cuando la hoja sigue cambiando, como un panel que se actualiza: un ancho fijo mantiene el diseño estable, evita que las columnas salten de un lado a otro, y es mucho más rápido que volver a ejecutar AutoFit sobre muchas columnas en cada actualización.

Probado en

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

Guías relacionadas: VBA Ajustar texto · VBA Inmovilizar paneles · VBA Ancho de columna · VBA Combinar celdas · VBA Range