TL;DR — El color de fondo de una celda vive en su objeto
Interior:Range("A1").Interior.Color = RGB(255, 242, 204). Es la capa de relleno — la pintura detrás del texto — y como todo formato, cambia la apariencia, no el valor. Dos cosas pillan a todo el mundo. Primera: borrar un relleno esInterior.ColorIndex = xlNone, que no es lo mismo que pintarlo de blanco. Segunda, y más importante: el color no es dato.SUMySUMIFno lo ven, así que un libro que usa el color de relleno para significar «aprobado» está guardando una categoría en un sitio que ninguna fórmula puede leer.
' Resalta toda la fila de encabezado con un relleno dorado suave.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sales")
ws.Range("A1:F1").Interior.Color = RGB(255, 242, 204)
' Quita un relleno del todo (vuelve a "No Fill", no a blanco).
ws.Range("A2:F2").Interior.ColorIndex = xlNone
Rellenar celdas con color es uno de los trabajos más automatizados de Excel, y comparte su modelo de
color exactamente con la capa Font — la misma división entre Color y
ColorIndex. Esta guía se centra en lo que es distinto del relleno: borrarlo correctamente, y la
idea más grande de que una celda con color es decoración, no información. En cuanto eso hace
clic, la pregunta de «cómo sumo las celdas amarillas» se responde sola — no las sumas, arreglas los
datos.
Lo que aprenderás
- El modelo mental —
Interiores la capa de relleno, situada detrás del texto - Fijar el color de relleno con
RGB, y borrarlo conxlNone(no con blanco) - La regla más importante — el color no lleva ningún dato, y ninguna fórmula puede leerlo
- Resaltar por condición sin un bucle que se queda obsoleto
- Rellenar rápido muchos rangos inconexos con
Union - Leer de vuelta un color de relleno, y la trampa de
xlNone
El modelo mental: Interior es la capa de relleno
Una celda tiene tres capas visuales, cada una alcanzada a través de su propio objeto: el texto
(Font), el relleno que hay detrás (Interior), y cómo se muestra el
número (NumberFormat). Interior es la del medio — la pintura de la
pared detrás de la escritura. Su propiedad principal es Color, y usa el mismo modelo de color que
Font: RGB(r, g, b) para cualquier color, o ColorIndex para la paleta heredada de 56 casillas.
Como comparte el modelo de color, aquí aplica la misma regla de la guía de fuentes: fija con
.Color = RGB(...), y nunca confundas .Color con .ColorIndex. Interior.Color = 6 es un casi
negro RGB(6,0,0); Interior.ColorIndex = 6 es amarillo. Quédate en un solo espacio numérico.
Borrar un relleno: xlNone no es blanco
Aquí está la primera trampa específica del relleno. Para quitar un fondo hay dos cosas que parecen iguales en pantalla pero no lo son:
ws.Range("A1").Interior.Color = RGB(255, 255, 255) ' lo PINTA de blanco
ws.Range("A1").Interior.ColorIndex = xlNone ' QUITA el relleno (No Fill)
En una hoja normal ambos se ven blancos, así que es fácil pensar que son equivalentes. No lo son. Un
relleno blanco sigue siendo un relleno — oculta las líneas de cuadrícula, se imprime como un bloque
blanco y responde Interior.Pattern = xlSolid. xlNone significa sin relleno en absoluto: las
líneas de cuadrícula se ven a través, no se imprime nada y la celda está de verdad vacía de formato.
Cuando restableces un rango — pongamos, borrar los resaltados de la ejecución anterior antes de
aplicar otros nuevos — casi siempre quieres xlNone, no blanco. Pintar de blanco es un error que
aparece más tarde, en una impresión o sobre una hoja con color, donde el bloque blanco de repente
destaca.
La regla más importante: el color no es dato
Esta es la idea que separa un libro limpio de uno frágil. Un color de relleno no lleva ningún
valor. Ninguna fórmula puede leerlo. SUM suma una celda amarilla igual que suma una blanca;
SUMIF, COUNTIF e IF no tienen ningún operador para «está resaltada». Así que en cuanto usas el
color para significar algo — las celdas doradas están aprobadas, las filas rojas están vencidas, el
verde significa pagado — has guardado una categoría en un sitio que el motor de cálculo no puede ver.
' Si "approved" importa, va en un valor, no solo en un color.
ws.Range("H2").Value = "Approved" ' una formula puede leer esto
ws.Range("A2:H2").Interior.Color = RGB(198, 239, 206) ' el color es la consecuencia, no la fuente
La regla práctica: pon el significado en una celda, y deja que el color venga detrás. Añade una
columna de estado, escribe «Approved» u «Overdue» en ella, y guía el relleno desde ahí (idealmente
con Formato condicional, más abajo). Entonces COUNTIF(Status, "Overdue") funciona, los filtros
funcionan, las tablas dinámicas funcionan — y el color es solo un eco visual de un valor que existe
de verdad. La gente sí echa mano de «sumar por color» con .Interior.ColorIndex en un bucle, y se
puede hacer, pero necesitarlo es casi siempre señal de que la categoría debería haber sido un valor
real desde el principio.
Resaltar por condición: usa una regla, no un bucle obsoleto
Igual que con el color de fuente, guiar el color de relleno desde una condición con un bucle simple produce una instantánea puntual que se pudre en cuanto los datos cambian:
' Solo instantanea - hay que re-ejecutar tras cada edicion.
Dim c As Range
For Each c In ws.Range("B2:B1000")
If c.Value < 0 Then c.Interior.Color = RGB(255, 199, 206)
Next c
Para un color que deba seguir valores en vivo, fija una regla de Formato condicional una vez y deja que Excel la vuelva a evaluar para siempre:
With ws.Range("B2:B1000").FormatConditions
.Delete
.Add(Type:=xlCellValue, Operator:=xlLess, Formula1:="0").Interior.Color = RGB(255, 199, 206)
End With
Reserva el bucle directo con Interior.Color para el resaltado estático — un informe puntual que
estás a punto de congelar y exportar. Para cualquier cosa que deba seguir siendo correcta a medida
que se edita la hoja, un FormatCondition es la herramienta adecuada. Esta es la misma decisión de
criterio que en la capa de fuente, y vale la pena interiorizarla una vez: los bucles pintan
instantáneas, las reglas se mantienen vivas.
Rellena muchos rangos rápido con Union
Fijar el relleno de un rango es instantáneo. Colorear cientos de celdas dispersas una a una en un
bucle es lento, porque cada asignación es una ida y vuelta aparte a Excel. Reúne las celdas en un
solo rango con Union y píntalas de una sola vez:
Dim target As Range, c As Range
For Each c In ws.Range("B2:B1000")
If c.Value < 0 Then
If target Is Nothing Then Set target = c Else Set target = Union(target, c)
End If
Next c
If Not target Is Nothing Then target.Interior.Color = RGB(255, 199, 206)
El bucle sigue decidiendo qué celdas, pero la parte cara — aplicar de verdad el relleno — ocurre
una vez para todo el Union en lugar de mil veces. (Para un bloque contiguo no necesitas Union en
absoluto; simplemente colorea todo el Range en una sola instrucción.) La regla general en todas las
capas de formato: decide en el bucle, aplica al rango.
Leer de vuelta un color de relleno
Leer Interior.Color devuelve el valor de 24 bits que fijaste (guardado internamente como BGR, así
que compáralo contra un RGB(...) en vez de leer el entero en bruto). Lo único que hay que vigilar es
el caso «sin relleno»:
Debug.Print ws.Range("A1").Interior.ColorIndex ' -4142 (xlNone) cuando no hay relleno
Debug.Print ws.Range("A1").Interior.Color ' 16777215 para un relleno blanco - parece "blanco", no "vacio"
Si necesitas saber si una celda está sin rellenar, comprueba Interior.ColorIndex = xlNone, no el
valor Color — porque una celda explícitamente blanca devuelve un Color válido y engañaría a una
comprobación basada en color. Este es el eco, del lado de la lectura, de la regla de antes de que
«blanco no es xlNone».
Cómo ayuda ExcelMaster
Los rellenos de celda parecen sencillos hasta que asoman los casos límite: xlNone frente a blanco,
un bucle de resaltado que debería haber sido una regla, el color usado como categoría que ninguna
fórmula puede leer, y un bucle celda a celda que se arrastra. Cada uno de esos es un error silencioso
— un resaltado obsoleto, un apaño de «sumar por color», una macro lenta.
ExcelMaster te deja describir
el resultado. Di «resalta las filas vencidas» o «sombrea el encabezado y borra los colores del mes
pasado», y escribe Interior.Color = RGB(...) para una pasada estática o un FormatCondition cuando
el color deba seguir los datos, borra con xlNone en vez de pintar de blanco, y aplica al rango
entero de una vez. Y cuando le pides «marca los pedidos aprobados», pone primero el estado en una
columna real — así el color significa algo que una fórmula puede contar de verdad. Te quedas con el
libro y con el código.
Preguntas frecuentes
¿Cómo pongo el color de fondo de una celda en Excel VBA?
Usa Range("A1").Interior.Color = RGB(red, green, blue) — por ejemplo RGB(255, 242, 204) para un
dorado suave. Interior es el objeto de relleno y Color toma un valor RGB de 24 bits que cubre
todos los colores. Usa Interior.ColorIndex = n (una casilla de paleta de 1 a 56) solo cuando
igualas un libro antiguo basado en paleta, y no mezcles los dos espacios numéricos.
¿Cómo quito o borro el color de relleno de una celda en VBA?
Pon Range("A1").Interior.ColorIndex = xlNone. Esto quita el relleno del todo, así que las líneas de
cuadrícula se ven a través y no se imprime nada. Poner Interior.Color = RGB(255,255,255) solo pinta
la celda de blanco, que sigue siendo un relleno y se comporta distinto en las impresiones y sobre
hojas con color. Para restablecer los resaltados, usa xlNone.
¿Puedo sumar o contar celdas por su color en VBA?
No con SUM, SUMIF ni COUNTIF — esas fórmulas no ven el color de relleno en absoluto. Puedes
inspeccionar Interior.Color o Interior.ColorIndex celda a celda en un bucle de VBA, pero
necesitarlo es señal de que la categoría debería ser un valor real. Pon «Approved» u «Overdue» en una
columna de estado y cuenta eso en su lugar; deja que el color sea un eco visual del valor.
¿Por qué mi resaltado queda desfasado después de editar la hoja?
Porque un bucle For Each ... Interior.Color aplica una instantánea puntual; no se vuelve a ejecutar
cuando cambian los valores. Para un color de relleno que deba seguir los datos, añade una regla de
Formato condicional con Range(...).FormatConditions.Add, que Excel vuelve a evaluar
automáticamente. Usa un bucle de relleno directo solo para un informe estático que pretendes
congelar.
¿Cómo coloreo rápido muchas celdas dispersas en VBA?
Construye un solo Range con Union dentro de tu bucle, y luego fija .Interior.Color sobre ese
rango combinado una sola vez, en lugar de colorear cada celda según la encuentras. Aplicar el relleno
una vez a todo el Union evita una ida y vuelta aparte por celda. Para un bloque contiguo, sáltate
Union y colorea todo el rango en una sola instrucción.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 11/08/2026.
Guías relacionadas: VBA Font · VBA NumberFormat · VBA Range · VBA With · VBA For Loop
