Category Archives: Excel

Excel: Formato condicional con fórmulas

Formato Condicional en Excel 2007El formato condicional es una característica bien interesante de Excel, ya que permite cambiar el formato de una celda (o un grupo de celdas) de acuerdo a ciertas reglas. Por ejemplo, podemos tener las siguientes situaciones:

  • Si el valor de la celda es mayor que 10, aplicarle un fondo verde y letras blancas.
  • Si en la celda aparece el texto N/A, ponerle un fondo rojo y al texto negritas.

En Excel XP ó 2003, tenemos un límite de 3 reglas por celda, lo cual puede ser suficiente en algunas circunstancias.

En cambio, en la versión 2007, mejoraron esta característica y quitaron ese límite, además de hacerlo más intuitivo. Incluso, en esta nueva versión podemos colocar iconos, barras y escalas a las celdas.

No es complicado trabajar con este formato condicional, pero pueden surgir dudas si queremos hacer las condiciones un poco más complejas y que estén basadas en funciones, por ejemplo, si el valor de la celda es numérico y mayor que 8. Para esto, existe una formula que revisa si una celda es un número o no, entonces, deberemos hacer lo siguiente:

Marcamos el rango de celdas al que queremos darle formato, y vamos a Formato Condicional / Administrar Reglas. Luego escogemos Nueva Regla y después Usar fórmula para determinar a que celdas darles formato. Colocamos lo siguiente en dicha ventana (si tu Excel está en español, debes usar la fórmula ESNUMERO):

Formato condicional con formula

Hay que tener en cuenta que usamos la primera celda del rango que hayamos elegido y esta no está fija. Esto quiero decir que NO debemos usar el caracter $ delante de la fila ni de la columna, así $A$1, ya que de lo contrario, siempre usaría esa celda para la formula y no cada una de las celdas a la que queremos aplicar el formato.

Le damos Aceptar, y tendremos lo siguiente:

Ventana Administrar Reglas del Formato Condicional

Como vemos, en Aplicar a está el rango que hemos elegido, que es al que se le aplicará el formato. Le volvemos a dar Aceptar y listo, tendremos lo que buscábamos:

Celdas con formato condicional

Ahora, un par de anotaciones. Primero, si en la formula hubieramos usado $A$1 en vez de A1, hubieramos conseguido lo siguiente:

Celdas con formato condicional mal aplicado

Esto se debe a que en todas las celdas del rango, estaría evaluando A1 en vez de la propia celda, y como A1 es numérico y mayor que 8, le aplica verde.

Segundo, si no hubieramos usado la fórmula ESNUMERO, las celdas con N/A estarían marcadas con verde también, porque el Excel lo toma como un valor mayor a cero.

Celdas con formato condicional

Pueden encontrar más información sobre el Formato Condicional en este y en este link.

Subrutinas para VBA

Por más que no sea un gran fan de Microsoft, debo admitir que el Office es un buen producto. A mi me gusta especialmente el Excel por la cantidad de cosas que se pueden hacer con él. Si además, lo utilizamos en conjunto con VBA (el pequeño entorno de desarrollo en Visual Basic que está metido dentro del Office), el número de posibilidades se incrementa exponencialmente. Es cierto que el VB está muy, muy lejos de ser el mejor lenguaje de programación, pero en este caso cumple su cometido (aunque muchas veces extrañe las ventajas de lenguajes más elaborados como C#).

Bueno, regresando al tema de este post, quería colocar acá algunas subrutinas que utilizo cuando programo en VBA. Creo que pueden ser útiles a más de uno, además que me sirven a mi cuando comienzo un nuevo proyecto.

' Adds a new worksheet to the current workbook.
' Name of the sheet should be pass as a parameter.
' If a sheet with the same name already exists, it is deleted prior creation.
Sub AddSheet(sheetName As String)
    RemoveSheet (sheetName)
    ' Added as last sheet
    Sheets.Add After:=Sheets(Sheets.count)
    Sheets(Sheets.count).name = sheetName
End Sub
 
' Deletes a worksheet from the current workbook.
Sub RemoveSheet(sheetName As String)
    Dim alerts As Boolean
    If SheetExists(sheetName) Then
        alerts = Application.DisplayAlerts
        ' Avoid alert on delete
        Application.DisplayAlerts = False
        Sheets(sheetName).Delete
        Application.DisplayAlerts = alerts
    End If
End Sub
 
' Returns TRUE if there is a worksheet with the given name on the active workbook.
Function SheetExists(sheetName As String) As Boolean
    SheetExists = False
    On Error GoTo NoSuchSheet
    If Len(Sheets(sheetName).name) > 0 Then
        SheetExists = True
        Exit Function
    End If
NoSuchSheet:
End Function

UPDATE: He encontrado que el cambio de nombre de la hoja en AddSheet puede fallar si existen hojas ocultas en el libro. Así que estoy buscando una solución, apenas la tenga la cuelgo.