Como la mayoría sabréis, el formato condicional de las hojas de cálculo, como el nombre indica, permite que el formato de una celda cambie si se producen determinadas condiciones. Por ejemplo, podemos hacer que una celda con un número aparezca de color rojo si es negativo o negro si es positivo. Lo que quiero mostrar en esta aportación es como cambiar el formato de una celda a partir de los valores que introducimos en otra celda que, además, está en otra pestaña de la misma hoja de cálculo (o dicho, mejor, en otra hoja del mismo libro).

Hay muchas opciones de formato condicional: si la celda está vacía, si hay un número, si el número es menor o mayor que una cantidad, si contiene un texto, etc. Pero todas se refieren a la misma celda donde la aplicamos. Si queremos que el formato cambie a partir del contenido de una celda diferente, hay que utilizar la última opción de todas, fórmula personalizada.

Esta fórmula siempre comenzará con un igual. Por ejemplo, podemos poner
=B1="F"
Ahora, nuestra celda actual, supongamos A1, cambiará de formato cuando en la celda B1 introduzcamos el valor F.

Además, podríamos hacer que este formato condicional tuviera efecto en un rango de celdas, y no solo en la celda A1. Por ejemplo, podría tener efecto en el rango A1: A10. Para conseguirlo, tenemos dos opciones. O bien copiamos y pegamos (con la opción pega solo el formato condicional) o simplemente indicamos el rango A1: A10 en la casilla donde dice Aplica al intervalo.
Aunque no lo veremos en ninguna parte, como que la fórmula no tiene ningún signo de $, la referencia de las celdas cambia en las otras celdas del rango. En la celda A2, es como si el formato condicional tuviera la fórmula = B2 = "F", aunque si miramos el formato condicional, sigue indicando la fórmula respecto a B1.

Hasta aquí, todo muy bien. ¿Pero qué pasa si queremos que la celda que contiene el valor que produce el cambio de formato está en otra hoja? Sería lógico pensar que solo hay que indicar la celda con el nombre de la hoja. Por ejemplo, = ‘Hoja 2’! B1 = "F"
Puede ser muy lógico, pero no funciona. Para que funcione, necesitamos utilizar otra fórmula, la fórmula iNDIRECT. Así pues, deberíamos escribir,
=INDIRECT("'Hoja 2'!B1")="F"
Tampoco parece tan complicado, ¿verdad? Pero, como siempre en estas cosas, hay efectos colaterales y no funciona bien. Tened en cuenta que ahora la referencia a la celda B1 está dentro de un campo de texto (está entre comillas). Por lo tanto, la hoja de cálculo no lo interpreta como una referencia a una celda sino como un texto. ¿Y qué consecuencia tiene esto? Que solo funciona bien en la celda A1. En las otras, aunque no haya ningún signo de dólar, no funciona. Cuando en la celda ‘Hoja 2’! B1 se pone una F, todo el rango A1: A10 cambia de color. Cuando se deja en blanco o se introduce cualquier otro valor, todo el rango A1: A10 pierde el color.
¿Hay solución? Sí, por supuesto. Basta complicar un poco más la fórmula para qué la referencia a B1 no esté en un campo de texto.
=INDIRECT("'Hoja 2'!"&ADDRESS(ROW(A1);COLUMN(A1)+1))="F"
Dentro de la fórmula INDIRECT, a partir del campo de texto, ponemos la fórmula ADDRESS, que nos creará una referencia a una celda, a partir de indicarle un número de fila y un número de columna.
Como fila, indicaremos la misma de nuestra celda A1, por tanto, ROW (A1). Y como columna, una más que la de nuestra celda A1, ya que en la hoja 2 miramos la columna B.
De este modo, las referencias a A1 sí son referencias a celdas y no son campos de texto. Por tanto, al aplicarlo al rango, sí se actualizarán y el formato condicional funcionará correctamente.

Hola, Jaume.
Recuerdo que comentamos algo sobre esto @Pedro Márquez Gallardo tú y yo en un tuit pre-pandémico. La verdad es que comprender la literalidad en el parámetro de
INDIRECT
es la clave para sacarle partido a esa función y poder hacer cosas muy sofisticadas con las hojas de cálculo. Muchas gracias por explicarlo tan bien.Se me ocurren un par de cosillas que pueden complementar tu aportación y que, con tu permiso, paso a explicar, a ver si se animan así más usuarios a seguir el hilo, que me parece muy interesante.
La primera es que en muchos casos no hace falta usar
DIRECCION
(ADDRESS
). Lo habitual es que el color (o el formato condicional que sea) de las filas del intervalo venga determinado por el valor de una celda situada en cierta columna fija en el intervalo de origen. En ese caso bastan con utilizar la funciónFILA
para construir la cadena de texto que alimenta aINDIRECTO
(INDIRECT
).Por ejemplo, en esta hoja de cálculo (es la que aparecía en el tuit anterior) hay en la hoja "Selector" una lista de DNI (columna A) y casillas de verificación (columna B). En la hoja "Formato condicional" se aplica color de fondo verde a las que tienen la casilla marcada.
La fórmula personalizada en la regla de formato condicional es esta:
=INDIRECTO("Selector!$B" & FILA (A2)) = VERDADERO
En esta caso "B" forma parte de la expresión literal a piñón fijo, solo necesitamos por tanto conocer la fila sobre la que está tomando decisiones la regla de formato condicional. Y eso lo averiguamos sencillamente con la función
FILA
.Y la segunda: En todo este tinglado también pueden intervenir otras fórmulas de búsqueda de datos como
QUERY
oBUSCARV
.Por ejemplo, si la tabla NIF / ✔️ tiene una ordenación distinta a la que presenta el intervalo a ordenar, no es suficiente con dejar que las referencias se "deslicen" hacia abajo, sin más.
Ahora la fórmula que se utiliza en la regla de formato condicional sobre A2:D11 debe ser esta:
=BUSCARV($A2;INDIRECTO("SelectorDesordenado!A2:B11");2;FALSO) = VERDADERO
Como el intervalo de búsqueda en la hoja de origen es siempre el mismo (A2:B11), va de nuevo dentro de la expresión entre comillas, sin parametrización alguna.
Lo que en su momento no conseguí es hacer esto mismo al 100% cuando el intervalo de datos sobre el que se realiza la comprobación está en una hoja de cálculo distinta. Sospecho que el problema tiene que ver con las actualizaciones y el modo en que funciona
IMPORTRANGE
.En su momento, llevando las cosas al extremo con funciones de tiempo neutras (su evaluación no afecta al resultado de la fórmula utilizada) para tratar de forzar una actualización, llegué a conseguir que funcionara... a medias 🤔
El
AHORA() = AHORA()
se puede sustituir porAHORA()<>""
... vamos, cualquier cosa que se evalúe aVERDADERO
y suponga un recálculo aún cuando no haya cambiado ninguna celda en la hoja de cálculo en la que se aplica el formato condicional (creo que esta es la clave del misterio).Lo de arriba solo hace lo que tiene que hacer de manera (razonablemente) consistente, aunque no sin dejarse de vez en cuando alguna que otra celda por pintar dentro de la fila que colorea, cuando se inserta una fórmula similar (sin la marcianada de los
AHORA
) en algún intervalo de celdas de la hoja. Pero entonces ya da un poco igual, claro.En cualquier caso aquí está la prueba, porque de lo contrario hasta yo lo dudaría 😅. Por alguna razón, lo que se ve en la animación funcionaba, aunque no del todo bien, en diciembre de 2019 aún sin contar con el uso de un
IMPORTRANGE
adicional... pero al desempolvarlo ahora no lo hace ya.Comparto aquí esta carpeta con los ejemplos que he mencionado, por si alguien quiere trastear con ellos.
Y por cierto y ya que estamos en ello, a ver si nos lee alguien de Google y se deciden a hacer un poquito más grande el huequecillo para escribir las fórmulas en el panel de formato condicional, que estas estrecheces no son de recibo, ¿no os parece?