TL;DR — No existe un único «borrar una celda».
.ClearContentslimpia el valor y la fórmula pero conserva el formato — el que quieres el noventa por ciento de las veces..Clearlimpia todo, formatos y bordes incluidos, así que úsalo solo para devolver una celda al blanco de fábrica..ClearFormatslimpia el formato y conserva los valores. Ponercell.Value = ""no deja la celda en blanco — deja una cadena de longitud cero queISBLANKlee como no vacía. Y.Clearno es.Delete: Clear vacía la celda en su sitio, Delete la elimina y desplaza a sus vecinas.
Range("A2:Z1000").ClearContents ' datos fuera, plantilla (bordes/colores/formatos) conservada
Range("A2:Z1000").Clear ' TODO fuera - ahora reconstruyes el formato
Range("A2:Z1000").ClearFormats ' formato fuera, valores conservados
Range("A2").Value = "" ' NO en blanco - una cadena vacia; ISBLANK es False
Range("A2").ClearContents ' de verdad en blanco
Todo el mundo aprende primero .ClearContents y luego se pregunta por qué .Clear «me borró los bordes»,
por qué una celda «en blanco» aún hace saltar un COUNTA, o por qué borrar un rango rompió fórmulas tres
columnas más allá. Todo viene de una sola idea que vale la pena retener: una celda es una pila de capas
independientes, y borrar es elegir qué capas limpiar. Elige la goma que corresponde a la capa que quieres,
y las sorpresas desaparecen.
Lo que aprenderás
- El modelo mental — una celda es capas, y borrar elige qué capas limpiar
.ClearContentsfrente a.Clearfrente a.ClearFormats- Por qué
cell.Value = ""es un falso blanco, y qué vacía de verdad una celda - Por qué
.Cleary.Deleteson operaciones distintas, no sinónimos - Borrar toda una hoja o un rango usado en una sola llamada rápida
El modelo mental: una celda es capas, borrar elige cuáles limpiar
Una celda no es una sola cosa. Contiene un valor o fórmula, un formato de número, una fuente y un relleno, bordes, formato condicional, validación de datos, y comentarios — capas independientes apiladas en la misma celda. No hay ningún método llamado «clear»; hay una familia de métodos, y cada uno elimina un subconjunto elegido:
Range("A1").ClearContents ' quita: valor/formula conserva: todo lo demas
Range("A1").ClearFormats ' quita: formato de numero, fuente, relleno, bordes conserva: valor
Range("A1").Clear ' quita: TODO lo anterior
En cuanto ves las capas, los nombres de los métodos se leen como exactamente lo que hacen. La pregunta nunca es «cómo borro esta celda» — es «qué capas quiero que desaparezcan», y la respuesta elige el método.
ClearContents vs Clear vs ClearFormats
.ClearContents es el caballo de batalla: limpia los datos, conserva la plantilla. Quita los valores y
las fórmulas y deja intactos los bordes, los colores, los formatos de número y la validación — que es
exactamente lo que significa «borrar los números del mes pasado para poder meter los de este»:
Range("B2:B50").ClearContents ' numeros fuera, la tabla con formato sigue pareciendo una tabla
.Clear es el mazo: quita el contenido y todas las capas de formato — bordes, rellenos, formato
condicional, validación de datos, comentarios. Este es el daño accidental número uno en VBA: echar mano de
.Clear para «vaciar» un rango con formato y descubrir que los bordes y los colores que construiste también
desaparecieron.
Range("B2:B50").Clear ' ahora B2:B50 esta en blanco Y sin formato - toca reconstruir
Usa .Clear solo cuando de verdad quieres decir «devuelve estas celdas a un estado nuevo y sin formato».
.ClearFormats es la herramienta quirúrgica opuesta — quita el formato, conserva los valores — y tiene
hermanos específicos para una sola capa: .ClearComments, .ClearHyperlinks, .ClearNotes,
.ClearOutline. Elige la capa, elige el método.
La trampa de la cadena vacía: una cadena vacía no está en blanco
Esta es la silenciosa. Asignar una cadena vacía no vacía una celda — guarda una cadena de longitud cero, que es un valor, no una ausencia de valor:
Range("A1").Value = "" ' A1 ahora contiene una CADENA de longitud cero
' ISBLANK(A1) es False; COUNTA cuenta A1; IsEmpty(Range("A1")) es False
Range("A1").ClearContents ' A1 ahora esta de verdad vacia
' ISBLANK(A1) es True; COUNTA ignora A1; IsEmpty(Range("A1")) es True
Una celda puesta a "" parece en blanco en pantalla pero se comporta como llena: COUNTA la cuenta,
ISBLANK e IsEmpty la reportan como no vacía, Range.End(xlUp) se detiene en ella, y los gráficos y las
tablas dinámicas la tratan como datos. Esto produce bugs enloquecedores del tipo «la celda está vacía pero
Excel no opina lo mismo». Para vaciar una celda, usa .ClearContents (o asigna Empty:
Range("A1").Value = Empty), nunca = "". La distinción entre una celda de verdad vacía y una cadena vacía
es una de las cosas más útiles que interiorizar; consulta VBA Cell Value para
saber cómo se leen de vuelta los valores.
Clear no es Delete: el desplazamiento que rompe las direcciones
.Clear y .Delete suenan a sinónimos y no lo son. .Clear vacía la celda pero la deja donde está.
.Delete elimina la celda por completo y desplaza a sus vecinas hacia arriba o hacia la izquierda para
llenar el hueco — así que cada dirección por debajo o a la derecha del borrado cambia, y las fórmulas que
apuntan a las celdas movidas pueden romperse o devolver #REF!.
Range("A5").ClearContents ' A5 esta vacia; A6, A7, ... se quedan quietas
Range("A5").Delete Shift:=xlUp ' A5 DESAPARECE; A6 pasa a A5, A7 pasa a A6, las direcciones se desplazan
Si tu objetivo es «dejar esta celda vacía», siempre es .ClearContents — nunca .Delete. Echa mano de
.Delete solo cuando de verdad quieres la celda, la fila o la columna fuera y el desplazamiento es el
objetivo, como al quitar filas en blanco. Borrar filas con seguridad (recorriendo de abajo arriba, usando
EntireRow) es un tema aparte; consulta VBA Delete Rows. Confundir las dos es
como una macro de «limpieza» revuelve una hoja en silencio.
Borrar toda una hoja o un rango usado en una sola llamada
Borrar es una operación de rango, así que hazlo en una sola llamada, no en un bucle celda por celda. Recorrer en bucle cruza de VBA a Excel en cada celda y se arrastra en rangos grandes; una sola llamada sobre todo el rango es una única operación (el mismo principio del viaje de ida y vuelta que al leer valores — consulta VBA Cell Value):
ws.UsedRange.ClearContents ' borra todos los datos de la hoja, conserva los formatos
ws.Cells.Clear ' limpia toda la hoja, contenido y formatos
Range("A2", Range("A2").End(xlDown)).ClearContents ' borra una columna de datos bajo un encabezado
UsedRange y CurrentRegion apuntan a «todo lo que tiene datos» sin codificar a mano una altura de rango;
consulta VBA UsedRange. Mi regla general: por defecto, .ClearContents.
.Clear es un reinicio de fábrica, no una goma; .Delete es cirugía estructural, no una goma; = "" es un
bug de falso blanco. Nueve de cada diez veces el verbo que quieres es .ClearContents, y la décima es
.ClearFormats.
Cómo ayuda ExcelMaster
Los errores de borrado que cuestan tiempo de verdad son los silenciosos: el .Clear que se llevó por
delante los bordes de la plantilla, el «blanco» de = "" que un COUNTA aguas abajo siguió contando, el
.Delete que desplazó una columna y rompió fórmulas a dos hojas de distancia. Cada uno hace algo — solo que
no el algo que querías.
ExcelMaster echa mano de la goma que
corresponde a tu intención. Pídele «borra los datos pero conserva el diseño» y usa .ClearContents sobre el
rango usado; pídele «reinicia esta hoja por completo» y usa .Clear. Vacía las celdas con .ClearContents
en lugar de = "", así que tus blancos son de verdad blancos, y reserva .Delete para cuando de verdad
quieres quitar filas — hecho de abajo arriba para que nada se desplace por debajo. Tú dices qué debe
desaparecer; él elige el método que deja intacto el resto de la celda.
Preguntas frecuentes
¿Cuál es la diferencia entre Clear y ClearContents en VBA?
.ClearContents quita solo los valores y las fórmulas, conservando el formato, los bordes, los formatos de
número y la validación. .Clear quita todo — el contenido y todas las capas de formato. Usa
.ClearContents para limpiar los datos manteniendo intacta una plantilla, y .Clear solo cuando quieres las
celdas reiniciadas a un estado completamente en blanco y sin formato.
¿Cómo borro el contenido de una celda pero conservo el formato en VBA?
Usa .ClearContents: Range("B2:B50").ClearContents quita los valores y las fórmulas dejando en su sitio
los bordes, los colores, los formatos de número y la validación de datos. Evita .Clear, que también arranca
todo ese formato, y evita = "", que deja una cadena de longitud cero en lugar de una celda de verdad vacía.
¿Es lo mismo poner una celda a una cadena vacía que borrarla en VBA?
No. Range("A1").Value = "" guarda una cadena de longitud cero, que es un valor: ISBLANK devuelve False,
COUNTA cuenta la celda, e IsEmpty la reporta como no vacía. Para dejar una celda de verdad en blanco, usa
Range("A1").ClearContents o Range("A1").Value = Empty. La celda con cadena vacía parece en blanco pero se
comporta como llena.
¿Cuál es la diferencia entre Clear y Delete en VBA?
.Clear (y .ClearContents) vacía una celda pero la deja en su sitio, así que las direcciones de alrededor
no cambian. .Delete elimina la celda por completo y desplaza las celdas vecinas hacia arriba o hacia la
izquierda para llenar el hueco, lo que cambia cada dirección por debajo o a la derecha de ella y puede romper
fórmulas con #REF!. Usa .ClearContents para vaciar una celda y .Delete solo cuando la quieres fuera.
¿Cómo borro toda una hoja o un rango usado en VBA?
Para borrar todos los datos pero conservar el formato, usa ws.UsedRange.ClearContents. Para limpiar toda la
hoja incluidos los formatos, usa ws.Cells.Clear. Las dos actúan en una sola llamada, que es mucho más
rápido que recorrer celda por celda, y UsedRange apunta exactamente a la región que contiene datos sin
codificar a mano un tamaño de rango.
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 Delete Rows · VBA Copy Paste · VBA UsedRange · VBA Number Format
