¿Cómo diseñar Macro para colorear filas por coincidencias?
Para todos y complacido de poder participar con mi inquietud y ojalá me puedan ayudar. Lo cierto es que soy novato (muy novato) y estoy en una carrera contra el tiempo que no me permite dedicarle mucho tiempo. Es por ello que acudo a pedir ayuda. Y no se trata de pereza, es que necesito una solución rápido. Aparte que ya no soy ningún joven, y la mente no es la misma, y aunque en la Uni programé mucho, ya esos conocimientos se me olvidaron y ni me sirven de base.
Mi problema es el siguiente:
Tengo unas base de datos con cientos de miles de filas por 6 columnas. Lo que necesito es una Macro que me busque fila por fila si las celdas C, D, E y F que (ojalá pudiera escoger y hasta colocar criterios de búsqueda, p. Ej, que este en blanco alguna de ellas) ; le corresponde, coinciden con otra (Cn=Cm, Dn=Dm, En=Em y Fm=Fn) y de ser así tanto esta como la coincidente se coloreen (en rojo por ejemplo. Con la primeras 2 celdas bastaría para advertirme la duplicidad). Yo se que existen las coincidencias porque al buscar las celdas repetidas seleccionando estas 4 columnas, me arroja que si hay pero las borra. Yo quiero que queden señaladas, no que las borre. De eso se trata.
Una rutina para colorear la copié de aquí pero es evidente que no me funciona, lo mas que he logrado que no sirve para nada, es que me repita del primer grupo de la lista todos los datos en una sola celda, pero de colorear nada. Creo que es porque debo quitar comentarios y colocar valores. Pues ahí por mis conocimientos tan limitados no lo logró por mas que ensaye. Igual seguiré tratando mientras consigo ayuda.
Muchas gracias y espero me puedan ayudar.
Esta es la rutina que copié:
Sub EncadenaColumnas(r As Range)
'encadena los vlores de cada fila en la siguiente columna
Dim i As Integer
Dim j As Integer
Dim maxi As Integer 'máximo numero de filas
Dim maxj As Integer ' máximo numero de columnas
Dim es As String
maxi = r.Rows.Count
maxj = r.Columns.Count
For i = 1 To maxi
es = ""
For j = 1 To maxj
es = es & Cells(i, j).Value
Next j
Cells(i, maxj + 1).Value = es 'copio el valor en la columna siguiente
Next i
End Sub
Sub ColoreaDuplicadosColumna(c As Range, micolor As Integer)
'c debe ser una columna
Dim i As Integer
Dim j As Integer
Dim por As Integer
Dim maxi As Integer 'máximo numero de filas
j = c.Column
maxi = c.Rows.Count
For i = 1 To maxi
For por = i + 1 To maxi
If Cells(i, j).Value = Cells(por, j).Value Then
'coloreo la primera
Cells(i, j).Interior.ColorIndex = micolor
End If
Next por
Next i
End Sub
Sub BorraFilasColoreadas(c As Range, micolor As Integer)
Dim i As Integer
Dim j As Integer
Dim maxi As Integer 'máximo numero de filas
j = c.Column
maxi = c.Rows.Count
For i = maxi To 1 Step -1 'en orden inverso
If Cells(i, j).Interior.ColorIndex = micolor Then
Rows(i).Select
Selection.Interior.ColorIndex = micolor
'Selection.Delete Shift:=xlUp 'descomentar para borrar
End If
Next i
End Sub
Sub ColoreaBorraFilasDuplicadas()
Dim r As Range
Dim c As Range
Set r = Range("A1:F871")
Set c = Range("G1:G871")
Call EncadenaColumnas(r)
Call ColoreaDuplicadosColumna(c, 3)
'Call BorraFilasColoreadas(c, 3) 'descomentar para que se ejecute
End Sub