Pregunta Excel 2007: formateo condicional para que cada fila muestre valores bajos de color amarillo, valores altos de color rojo


Tengo una hoja de cálculo con aproximadamente 300 filas. Cada fila tiene alrededor de 15 columnas, y cada celda contiene un valor numérico. Cada fila corresponde a un producto.

Quiero que Excel, para cada producto, destaque las celdas con los números más altos en rojo y los números más bajos en amarillo, con un degradado para los números intermedios. Esto es lo que sucede si selecciono una fila (específicamente, las 15 celdas de la fila que contiene mis datos) y luego hago clic en Formato condicional> Escalas de color> Escala de color rojo-amarillo.

Sin embargo, tengo 300 filas y tomará demasiado tiempo seleccionar cada fila individualmente y establecer el formato condicional. Por otro lado, si selecciono todo el rango y aplico el formato condicional, Excel calcula los colores basados ​​en todo el rango, cuando de hecho los quiero calculados fila por fila. Por ejemplo, tome esta muestra de datos:

1 2 3
4 5 6
7 8 9

La salida que quiero, usando Y para amarillo, O para naranja, R para rojo, es:

Y O R
Y O R
Y O R

Sin embargo, si selecciono todo el rango y aplico el formato condicional, obtengo:

Y Y Y
O O O
R R R

¿Hay alguna manera de lograr esto sin hacerlo una fila a la vez?


11


origen


@wizlog: Eso es correcto. El valor más alto en una fila debe ser rojo, el valor más bajo en esa fila debe ser amarillo, y los otros valores deben estar en algún punto intermedio (cuanto más cerca esté el valor más alto, más rojo). - Michael Pavey
Me gusta esta pregunta ... Veré si puedo encontrar una respuesta ... Probablemente pasarán unas horas antes de que pueda volver a ayudar, espero que otros miembros de SuperUser encuentren una respuesta a tiempo a través de ... - wizlog
Me gusta esta pregunta también. Pero no veo otra forma de acercarte a esto que no sea usar una macro. Espero que alguien me demuestre que estoy equivocado. - Ellesa


Respuestas:


Aquí hay una macro que crea un formato condicional para cada fila en su selección. Hace esto copiando el formato de la primera fila en CADA fila de la selección (uno por uno, no del todo). Reemplazar B1: P1 con la referencia a la primera fila en su tabla de datos.

Sub NewCF()
    Range("B1:P1").Copy
    For Each r In Selection.Rows
        r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
End Sub

Para usar, resalte las filas no formateadas en su conjunto de datos (en mi caso, B2: P300) y luego ejecuta la macro. En el ejemplo siguiente, tenga en cuenta que los números máximos en las primeras dos filas son 5 y 15, respectivamente; ambas celdas son rojo oscuro.

Sin embargo, estoy seguro de que hay una solución más rápida que esta.

enter image description here


11



Gracias, esto funcionó maravillosamente. También es un gran ejemplo del valor de pedir ayuda cuando no estoy seguro ... Me había intimidado la idea de utilizar una macro, ya que supuse que tendría que aprender a configurar el formato condicional desde cero. Obtener la macro solo para copiar el formato existente es mucho más astuto :) - Michael Pavey
@MichaelPavey ¡Me alegro de poder ayudar! ¡Y bienvenido a Superusuario! :) - Ellesa
+ 1. Si alguien está interesado, llevé este concepto más allá en mi blog: yoursumbuddy.com/conditional-formatting-per-row-color-scales - Doug Glancy
Es ridículo que este tipo de cosas no esté integrado en Excel como una característica. ¿Es tan raro querer comparar filas de esta manera? - Alex


La forma más fácil de lograr esto es con copiar / pegar de forma incremental. Primero, formatee 1 fila de la forma que desee. Luego, copie y pase el formato solo a SÓLO una segunda fila. Ahora copie AMBAS filas 1 y 2 y pegue el formato en las filas 3 y 4. Enjuague y repita, Copie 4, pase 4, copie 8, pegue 8, copie 16, pegue 16. Una vez que tenga una cantidad decente como 16, pégalo unas cuantas veces para obtener hasta 64 o 128. Luego puedes copiarlos y pegarlos, y expones exponencialmente más territorio que antes.

No es elegante, y en mi experiencia, los recursos necesarios para formatear condicionalmente el inicio de fila empiezan a llegar al máximo alrededor de 2500 filas ... pero se hace el trabajo.

Solo desearía que hubiera una lógica que no creara un formato condicional separado para cada fila, acaparando recursos ...


3



Creo que el OP dijo "Sin embargo, tengo 300 filas y tomará demasiado tiempo seleccionar cada fila individualmente y establecer el formato condicional". en la pregunta - Prasanna
@Poultron, gracias! Para agregar a esto: Usando Ctrl / Cmd + Shift + Arriba / derecha, puede seleccionar fácilmente todas las filas y columnas anteriores, por lo que no necesita contar las filas anteriores. Luego, cuando esté listo para pegar, simplemente coloque el cursor en la primera celda debajo de las filas ya formateadas y Formato de pegado especial solamente, se extenderá para cubrir tantas filas como se copiaron. Ctrl / Cmd + Shift + V también recordará la última pasta especial que desea usar, por lo que todo el proceso se realiza con bastante rapidez. Solo lo usé en dos hojas de cálculo con 600 filas cada una. - Oskar Austegard


Acabo de encontrar este y otros ejemplos de cómo hacer esto a través de VBA y me hizo pensar y descubrí una manera relativamente rápida e indolora de hacer lo mismo sin tener que saber o copiar ningún script.

Aplique el formato condicional deseado a la fila que desee y luego resalte toda la fila. Luego, haga clic con el botón derecho en cualquier parte del borde (el mouse debe ser el icono Mover) y arrastre hacia abajo hasta la siguiente fila. En el menú contextual que aparece, seleccione "Copiar aquí como solo formatos". Ahora debería tener su Formato Condicional aplicado a ambas filas por separado. Luego continúe haciendo esto recursivamente, excepto que ahora puede seleccionar y copiar 2 o más filas a la vez.

No es un trato único como el código anterior, pero es exponencialmente más rápido que hacer una línea a la vez. Espero que esto ayude.


0