Macros con formatos condicionales

El cual detallo a continuación.
Tengo una base de datos de 1000 filas y 25 27 columnas. El punto es que he creado un formato condicional según el cual, si en la celda B8 aparece la letra "i" el rango C8:AA8 se colorea, lo cual se aplica a 2 condiciones más ( letras "n" y "p"). El problema es que necesito crear una macro para aplicar este formato condicional a cada una de las 1000 filas de mi base de datos.
Hasta ahora lo único que he logrado hacer es lo siguiente:
' Acceso directo: CTRL+i
'
    Range("C8:AA8").Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$8=""i"""
    Selection.FormatConditions(1).Interior.ColorIndex = 33
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$8=""n"""
    Selection.FormatConditions(2).Interior.ColorIndex = 45
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$B$8=""p"""
    Selection.FormatConditions(3).Interior.ColorIndex = 4
End Sub
Lo cual no me sirve puesto que tengo que cambiar el numero de la fila cada vez que desee aplicar la macro a una fila.

1 respuesta

Respuesta
1
La macro sería más o menos así (nota no hago formato condicional, si no que directamente le cambio de color según sea el valor de la columna B):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Select Case UCase(Target) ' la pone en mayusculas
Case "I"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 33
Case "N"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 45
Case "P"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 4
Case Else
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = xlNone
End Select
End If
End Sub
Muchas gracias por tu respuesta pero si no fuera mucho la molestia, me gustaría saber si existe alguna forma de combinar la macro que te envíe con la función "for", es decir, que la macro realice el proceso del formato condicional para cada fila, de la 7 a la 1007.
Gracias nuevamente.
Molestia no es, pero tengo que enerder tú nueva necesidad y creo que a primera vista no lo entiendo.
Con la rutina que te creé, cada vez que cambies un valor de la columna B estudia su valor y si es "I", "N" o "P" se asigna el color a esa linea de desde la columna 3 a la 27 y si el valor que has cambiado en la columna B es diferente a los preselecionados, las celdas de esa fila serán sin color.
Por ello, no entiendo tu nueva necesidad, si puedes acláramelo para poder ayudarte.
La verdad es que no logre ejecutarlo, por esta razón pensé que seria más fácil con algún otro mecanismo. No tengo mucho conocimiento de programación.
Me seria de mucha ayuda si me pudieras explicar como se ejecuta la macro que me enviaste en un principio.
Saludos
Lo primero es bajar el nivel de seguridad del fichero, y para ello vamos al menu principal de excel,
HERRAMIENTAS - OPCIONES pica en la pestaña SEGURIDAD y pincha en el botón SEGURIDAD DE MACROS y es hoja nueva ventana pica en MEDIO para te pregunte en todos los ficheros si aceptas esa macro.
Una vez hecho esto, vamos a la hoja de exel y con el ratón derecho seleccionamos la pestaña de la hoja que quieres poner esas condiciones y picamos el ratón derecho y seleccionamos VER CÓDIGO, en esa nueva hoja de macros, ahí es donde tienes que copiar/pegar el código que te envío: (luego te pasas a excel y vuela... tiene que funcionar) Ya me comentarás algo al respecto.
L código que tienes que pegar esta debajo de esta linea de pespuntes...
'------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Select Case UCase(Target) ' la pone en mayusculas
Case "I"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 33
Case "N"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 45
Case "P"
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = 4
Case Else
Range(Cells(Target.Row, 3), Cells(Target.Row, 27)).Interior.ColorIndex = xlNone
End Select
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas