es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo crear un bucle for para aplicar formato condicional?

He creado una condición de formato condicional para el primer conjunto de columnas (C:E) (ver imagen 3).

Range("C1:E36").Select
Selection. Format Conditions. Add Type:=xlExpression, Formulal:="=$D6=""Sun"""
Selection. Format Conditions (Selection. FormatConditions. Count).SetFirstPriority
with Selection. Format Conditions (1). Interior
.Pattern = xlLightVertical
. PatternColor = 65535
.ColorIndex = xlAutomatic
.PatternTintAndShade = 0
End With

Estoy tratando de crear un bucle for que debería aplicarse a los doce conjuntos, cada uno con 3 columnas (ver imagen 2). Además, debería ejecutarse 3 veces, comenzando en las filas C6, C45,C84 – correspondiente a los tres años que estoy tratando de mostrar (ver imagen 1). Estoy luchando con el bucle for. Y la referencia absoluta relativa en las columnas de $D6 en el formato condicional y cómo hacer que sea $G6, $J6, $D84, $G84.

Para o = 1 a 3 paso 1
    Para I = 1 a 12 paso 1
    Rango (.Celdas(6, I * 3), .Celdas (36, I * 3 + 2)).Select
    Selección. Formato Condiciones. Añadir Tipo:=xlExpressionFormulal:="=$D6=""Sun"""
    Selección. Formato Condiciones (Selección. Formato Condiciones. Conteo). EstablecerPrioridadPrimero
    Con Selección. Formato Condiciones (1). Interior
   .Pattern = xlLightvertical
   .PatternColor = 65535
   .ColorIndex = xlAutomatic
   .PatternTintAndShade = 0
    End With
    Siguiente I
Siguiente O
End Sub'

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Necesita modificar el código para recorrer todos los conjuntos de columnas y aplicar el formato condicional para cada conjunto. Puede usar un contador para llevar un registro de la fila inicial de cada año. Aquí hay un ejemplo de código que debería funcionar:

    Sub AplicarFormatoCondicional()
        Dim i As Integer, o As Integer
        Dim filasIniciales(1 To 3) As Integer
        filasIniciales(1) = 6  ' fila inicial para el año 1
        filasIniciales(2) = 45 ' fila inicial para el año 2
        filasIniciales(3) = 84 ' fila inicial para el año 3
    
        For o = 1 To 3
            For i = 1 To 12 Step 3
                Range(Cells(filasIniciales(o), i), Cells(filasIniciales(o) + 29, i + 2)).Select
                With Selection.FormatConditions.Add(Type:=xlExpression, Formula1:="=$D" & filasIniciales(o) & "=""Sun""")
                    .SetFirstPriority
                    With .Interior
                        .Pattern = xlLightVertical
                        .PatternColor = 65535
                        .ColorIndex = xlAutomatic
                        .PatternTintAndShade = 0
                    End With
                End With
            Next i
        Next o
    End Sub
    

    Este código utiliza una matriz filasIniciales para almacenar la fila inicial de cada año. Luego recorre todos los conjuntos de columnas (incrementando de 3 en 3 cada vez), selecciona el rango para el conjunto de columnas actual y aplica el formato condicional con la fórmula y fila inicial correctas.

Comments are closed.