Home > Excel, Trucos, vba > Formato condicional más de 3 condiciones en Excel 2003

Formato condicional más de 3 condiciones en Excel 2003

En esta ocasión comparto una macro que permitirá a las versiones de Excel 2003 y anteriores, utilizar más de 3 opciones de formato condicional. Esto se hace mediante el constructor Select Case con el evento Change de la hoja activa.

Código:

'---------------------------------------------------------------------------------------
' Procedure : Worksheet_Change
' Date      : 24/04/2011
' Purpose   : Formato condicional con más de 3 condiciones en Excel 2003 (-)
'---------------------------------------------------------------------------------------
'
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo fin
    If Application.Intersect(Target, [A3:I21]) Is Nothing Then Exit Sub
    With ThisWorkbook.ActiveSheet
        Select Case Target
        Case .Range("K3").Value
            Target.Interior.ColorIndex = .Range("K3").Interior.ColorIndex
        Case .Range("K4").Value
            Target.Interior.ColorIndex = .Range("K4").Interior.ColorIndex
        Case .Range("K5").Value
            Target.Interior.ColorIndex = .Range("K5").Interior.ColorIndex
        Case .Range("K6").Value
            Target.Interior.ColorIndex = .Range("K6").Interior.ColorIndex
        Case .Range("K7").Value
            Target.Interior.ColorIndex = .Range("K7").Interior.ColorIndex
        Case .Range("K8").Value
            Target.Interior.ColorIndex = .Range("K8").Interior.ColorIndex
        Case .Range("K9").Value
            Target.Interior.ColorIndex = .Range("K9").Interior.ColorIndex
        Case .Range("K10").Value
            Target.Interior.ColorIndex = .Range("K10").Interior.ColorIndex
        Case .Range("K11").Value
            Target.Interior.ColorIndex = .Range("K11").Interior.ColorIndex
        Case .Range("K12").Value
            Target.Interior.ColorIndex = .Range("K12").Interior.ColorIndex
        Case Else
            Target.Interior.ColorIndex = xlColorIndexNone
        End Select
    End With
    Exit Sub
fin:
    MsgBox "Intentaste borrar más de una celda a la vez. Debes de borrar celda por celda", vbCritical, "Error de borrado"
End Sub

:: Descarga el ejemplo

  1. October 14, 2011 at 07:06

    Gracias Sergio, el ejemplo esta maravilloso y es la solució a una hoja de control que aplico en mi oficina, el probelma es que trato y trato de modificar el codigo para que funcione unicamente en el rango (F11:F1011) y que tome los datos de referencia para el combo desde (F3:F7) y de (I3:I7) pero del todo no me funciona, te solicito tu ayuda a ver si puedo resolver el caso que tengo en la oficina. Gracias.

    • sergioacamposh
      October 16, 2011 at 10:10

      Exactamente qué parte no te funciona ?? En la siguiente línea es dónde debes especificar tu rango que se va a colorear:

      If Application.Intersect(Target, [F11:F1011]) Is Nothing Then Exit Sub

      Te comento que el combo no puede utilizarse en rangos que no sean continuos. Aunque no es obligatorio que uses un combo, ya que en el código, donde se especifican los CASE’s es donde haces referencia a cada celda de origen,

      Espero haberme explicado, de lo contrario, enviame un ejemplo de tu archivo para apoyarte.

  2. mahf
    March 19, 2012 at 12:32

    Estuve buscando la solucion a este problema y gracias a ti la encontre. Solo es cuestion de cambiar los parametros a las celdas que queramos.

    Muchisimas gracias.

    • sergioacamposh
      March 19, 2012 at 12:35

      Me da gusto.

  1. December 29, 2011 at 22:04

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s