TL;DR —
AutoFitmide 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. UsaColumns("A:D").AutoFitpara el ancho yRows("1:100").AutoFitpara el alto; cuando partes de un rango parcial, pasa por.EntireColumno 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 —
AutoFites 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.AutoFitsiempre se mueve peroRows.AutoFita menudo no - Ajustar un rango parcial con
.EntireColumn, y la hoja entera conCells.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.AutoFit —
Cells 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
