En este caso, podemos tomar el siguiente ejemplo: si es azul, que ponga un 1; si es amarillo, que ponga un 2, y así sucesivamente, un número para cada color.

Lo que se pide aquí es lo opuesto a un formato condicional. En vez de aplicar un formato según el valor de la celda, se pide obtener un valor según el formato. Si bien no existe ninguna opción para esto, se puede obtener ese resultado mediante una función especialmente creada para ese fin. Algo así:

Function valorcolor(x)

c = x.Interior.ColorIndex

Select Case c

Case 5

valorcolor = 1

Case 6

valorcolor = 2

Case 3

valorcolor = 3

Case 50

valorcolor = 4

End Select

End Function

Esta función “toma nota” del color del relleno de la celda, obtenido mediante la propiedad Interior.ColorIndex. Esta propiedad es un número que depende de ese color: es 5 para el azul, 6 para el amarillo, 3 para el rojo, y así sucesivamente. Una vez que la función sabe cuál es el color aplicado en la celda, devuelve un número del 1 al 4, tal como pide la pregunta. Si la lista de celdas de color la tenemos en la columna [A], a partir de [A2], escribimos la función en [B2]: =valorcolor(A2). Luego extendemos esta función a
toda la lista.

Un problema que tiene esta función es que no se recalcula ante cada modificación de la hoja, como debe ocurrir en una fórmula de Excel. Una manera de resolver este problema es incluir en la fórmula una expresión que sí se recal­cule, aunque sin modificar el valor de la función propiamente dicha. Por ejemplo, =valorcolor(A2)+0*ALEATORIO(). Al estar multiplicada por cero, la función ALEATORIO no afecta el resultado de la función, pero sí fuerza su recálculo.

 

Las fórmulas de la columna [B] usan una función creada en el editor de macros para obtener un valor numérico asociado a cada color. Esta función no se recalcula automáticamente ante un cambio en la planilla.
Al agregar la función ALEATORIO en las fórmulas de la columna [B], el valor devuelto se actualiza automáticamente al cambiar algún valor de la planilla.