lunes, febrero 09, 2009

Formato condicional con iconos en Excel 2007

Sin lugar a dudas, las posibilidades del formato condicional en Excel 2007 han sido ampliadas enormemente. Sin embargo, algunas de las posibilidades están lejos de ser intuitivas.

Por ejemplo, el uso de las colecciones de iconos. Supongamos, como me plantea un lector, que tenemos una lista de fechas de vencimientos. Queremos sacar partido de los semáforos del formato condicional de Excel 2007 de manera que si la fecha del vencimiento cae más de 30 días de la fecha corriente aparezca un semáforo verde; si la fecha está dentro de los 30 días un semáforo amarillo y si la fecha ha vencido, un semáforo rojo. Es decir, esto:




Empecemos por agregar una columna auxiliar que muestre la diferencia en días entre la fecha corriente y la fecha de vencimiento



Para poner los semáforos en esta columna abrimos el menú de Formato Condicional –Nueva regla, elegimos el conjunto de iconos (semáforo con recuadro), en Tipo elegimos Número, para el semáforo verde ponemos “>30” y para el amarillo “>=0”. Esto hace que el rojo quede para los valores inferiores a 0. Como dije al principio, no muy intuitivo que digamos



El resultado será



Una posibilidad interesante es editar la regla y marcar la opción “Mostrar icono únicamente”



Pero si queremos prescindir de la columna auxiliar tendremos que definir las reglas del formato condicional de esta manera



EL primer cambio es que definimos el tipo de regla como Fórmula; en Valor creamos una referencia a la celda que contiene la fecha corriente ($B$1 en nuestro caso) + 30 para el semáforo verde y $B$1 para el amarillo (el rojo queda definido por defecto)





Technorati Tags:

domingo, febrero 08, 2009

viernes, febrero 06, 2009

Más sobre formato personalizado de números en Excel

A partir de la nota anterior sobre formato personalizado de números en Excel (también pueden ver esta otra nota), un lector me plantea la siguiente consulta: “como puedo dar formato a una celda tal que si el número no es entero muestre siempre cinco decimales y si el número es entero, ninguno”.

Nuestro lector intento usar el siguiente formato personalizado "#,##0.#####”, el cual tiene el inconveniente de mostrar el separador de miles (coma o punto, dependiendo de las definiciones regionales) aún cuando el número es entero, como puede verse en este ejemplo




Si usamos Excel 2007 la solución del problema es bien sencilla. En lugar de formato personalizado de números usamos Formato Condicional creando dos reglas, una para cuando el número es entero y otra para cuando no lo es.


Suponiendo que el rango de números que queremos formar está en la columna C, para evaluar si el número es entero o no usamos la formula


=C1-TRUNCAR(C1)


Esta fórmula resta del número la parte entera; si el número es entero el resultado es 0. De esta manera podemos crear dos reglas para el formato condicional de las celdas

=(C1-truncar(C1))<>0 que VERDADERO si el número no es entero

=(C1-truncar(C1))=0 que da VERDADERO si el número es entero



Como pueden ver, Excel 2007 tiene una pestaña para dar formato a números en Formato condicional, lo que no existe en las versiones anteriores.


El resultado ahora es el buscado



Con las versiones de Excel 97-2003, no podemos usar formato condicional para formar números





Tampoco podemos usar un formato personalizado condicional, ya que éste no acepta fórmulas. El único camino que nos queda por delante es programar un evento.


Suponiendo que el rango a formar sea la columna C, en el módulo de Vba para la hoja ponemos este código



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngToFormat As Range, test

On Error Resume Next
Set rngToFormat = [C:C]
test = Target.Value - Int(Target)


If Union(Target, rngToFormat).Address = rngToFormat.Address Then
Select Case test
Case 0
Target.NumberFormat = "General"
Case Else
Target.NumberFormat = "#,##0.00000"
End Select
End If
On Error GoTo 0

End Sub


Esta macro se dispara cada vez que introducimos un valor en alguna de las celdas de la columna C; evalúa si el número es entero o no y aplica el formato correspondiente.




Technorati Tags: