Como hacer una macro que detecte los registros que están más de 1 vez y le cambie color a otra celda

Anteriormente me habían ayudado con un tema similar pero no logro ajustar una macro. Tengo en mi columna F: nombres de clientes (unos se repiten varias veces y otros no), ¿cómo puedo hacer para que me cambie de color la celda que le corresponde de su renglón cuando aparezca más de 1 vez?

El Maestrazgo Dante Amor me ayudó con esta macro

For i = 15 to 5000

Cuenta=WorksheetFunction.CountIf(Range("F15:F500"),Cells(i,"F"))

if cuenta > 1 Then

Cells(i,"I").Interior.ColorIndex=44

End If

Next

Y funciona de maravilla. Le cambio la condición antes del Then y si colorea lo que este más de 1 vez, pero necesito que solo lo haga en 1 primer registro.

Es decir si aparece:

Arturo Salas

Arturo Salas

Arturo Salas

Sólo coloque color al primero y los demás dejarlos en blanco, ya intenté hacerlo con un Loop Until pero no me sale, ¿podrían ayudarme de favor?

1 Respuesta

Respuesta
1

.05.12.16

Buenas, Emilio

Prueba con esta variante sobre la correcta rutina que te proporcionaron:

For i = 15 To 5000
    cuenta = WorksheetFunction.CountIf(Range("F15:F500"), Cells(i, "F"))
    If cuenta > 1 Then
        Cells(i, "I").Interior.ColorIndex = 44
        Exit Sub
    End If
Next

Saludos

Fernando

.

Muchas gracias por tu tiempo Fernando, al correrla si ópera como la tenía sólo que me marca de color todos los registros solo quiero que marque 1 de los que aparecen m

...de los que aparecen más de 1 vez..

.

Entiendo, Emilio

En tal caso, te propongo una macro ligeramente diferente:

Sub marca1rep()
'---- Variables modificables ----
'=== XXXXXXXXXXXXXXXXXXXXX, modifica estos datos de acuerdo a tu proyecto:
ElRango = "F15:F500" '<- Rango donde buscar repetidos
ElColor = 28 ' Color a dar al primer registro repetido
PintaCol = "I" 'Columna donde aplicar el color
'---- fin Variables
'
'---- inicio de rutina:
'  
Filas = Range(ElRango).Rows.Count
IniRango = Range(ElRango).Cells(1, 1).Address
For Fila = 0 To Filas
    If WorksheetFunction.CountIf(Range(ElRango), Range(IniRango).Offset(Fila).Value) > 1 Then
        If WorksheetFunction.CountIf(Range(Range(IniRango), Range(IniRango).Offset(Fila)), Range(IniRango).Offset(Fila).Value) = 1 Then
            Cells(Range(IniRango).Offset(Fila).Row, PintaCol).Interior.ColorIndex = ElColor
        End If
    End If
Next
End Sub

Pruebalo y dime si te funciona como esperabas.

Otro abrazo!

Fer

.

.

Una aclaración más.

Debajo de donde te marqué con XXXX, hay tres variables que te permitirán cambiar algunos parámetros por si necesitas modificarlos.

.

Eventualmente, esto mismo podrías lograrlo con Formato Condicional

La ventaja es que ante cambios en las celdas, el primer dato repetido se pinta automáticamente, sin necesidad de ejecutar macro alguna.

Bastaria que le apliques a la columna I, un formato condicional con la siguiente regla:

Pero entendí claramente que quería una macro.

Una de las grandes ventajas de MS Excel que te permite distintos caminos para resolver un mismo problema.

Saludos
Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas