¿Cómo puedo asignar un color de texto a una fila en Excel, dependiendo del valor de su primera celda?

Tengo un problema con una hoja de Excel, en la cual debo dejar toda una línea en texto (o dígitos) rojo, la cual dependerá de su primera celda, como se puede apreciar en la siguiente imagen:

Como se observa, el día domingo ("B7") se encuentra en rojo, pero las celdas siguientes no. Debo hacer que en todas las celdas de la columna "B" que se encuentre la palabra "domingo" quede en dicho color (hasta "L7").

Respuesta
-1

Se agradece, pero debe ser a través de programación en VBA, es una exigencia.

Sería bueno que en las próximas preguntas indicases las condiciones en que quieres resolver el problema.

2 respuestas más de otros expertos

Respuesta
1

Lo que pides esta canijo por fórmula o por formato condicional ya que este solo te coloreara la palabra domingo y nada más, para ello te propongo dos macros, esta macro la colocalas en el modulo de la hoja1 de VBA y lo que hace es que en cuanto escribas el día si es domingo en automático formateara en rojo toda las columnas hasta la L de la fila donde este, solo tendrás que escribir algo en las demás columnas y este saldrá en rojo

Private Sub Worksheet_Change(ByVal Target As Range)
VALIDA = Not Intersect(Target, Range("B:B")) Is Nothing
If VALIDA Then
    Set DATOS = Range("B2").CurrentRegion
    With DATOS
        R = .Rows.Count
        Set DATOS = .Resize(R, 9)
        FILA = ActiveCell.Row
        On Error Resume Next
        DOMINGO = UCase(Target) = "DOMINGO"
        On Error GoTo SAL
        If DOMINGO Then
            .Rows(R).Font.ColorIndex = 3
        Else
            .Rows(R).Font.ColorIndex = 1
        End If
    End With
End If
SAL:
End Sub

la segunda maco hace lo casi lo mismo solo que aqui tienes que escribir la informacion, la macro una vez que la actives mediante un boton (esta amcro va en el modulo standar de VBA) buscaratodo lo que tenga la palabra domingo y lo coloreara de rojo.

Sub colorear()
Set datos = Range("b1").CurrentRegion
With datos
    R = .Rows.Count
    Set datos = .Resize(R, 9)
    For I = 1 To R
        DOMINGO = UCase(.Cells(I, 1)) = "DOMINGO"
        If DOMINGO Then .Rows(I).Font.ColorIndex = 3
    Next I
End With
Set datos = Nothing
End Sub

¡Gracias! Muy buena la solución y no era tan complejo, aunque después de la guerra, todos son generales x)... La idea ahora es poder generar un módulo y utilizarlo tantas veces como sea necesario desde "Sub Worksheet_SelectionChange" al ser llamado.

También encontré una posible solución de código para este problema, aunque es un poco más humilde (aunque limita los rangos, lo que deja un poco más rápido trabajar con la planilla):

Dim MiRango As Range
Set MiRango = Range("B9:B100")
    For Each CeldaActual In MiRango
        If CeldaActual.Value = "domingo" Then
            CeldaActual.Font.Color = 255
            CeldaActual.Offset(0, 1).Font.Color = 255
            CeldaActual.Offset(0, 2).Font.Color = 255
            CeldaActual.Offset(0, 3).Font.Color = 255
            CeldaActual.Offset(0, 4).Font.Color = 255
            CeldaActual.Offset(0, 5).Font.Color = 255
            CeldaActual.Offset(0, 6).Font.Color = 255
            CeldaActual.Offset(0, 7).Font.Color = 255
            CeldaActual.Offset(0, 8).Font.Color = 255
            CeldaActual.Offset(0, 9).Font.Color = 255
            CeldaActual.Offset(0, 10).Font.Color = 255
        End If
    Next

 Muchas gracias por tu ayuda James Bond por tu apoyo, las dos opciones han funcionado.

Te conviene más que el evento sea change en vez de selectionchange, por esta simple razón cada que tecles una letra la macro se va a activar, en ocasiones te va a arrojar un error y se va a bloquear la macro esto si utilizas selectionchange en cambio si usas change la macro no se activara hasta que termines de escribir la palabra y cambies de celda y el riesgo de mensajes de error es mínimo.

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas