Excel - COMPARAR DATOS DE 2 COLUMNAS EN 2 HOJAS, MARCANDO LOS REPETIDOS.

 
Vista:
sin imagen de perfil
Val: 179
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COMPARAR DATOS DE 2 COLUMNAS EN 2 HOJAS, MARCANDO LOS REPETIDOS.

Publicado por Quico (106 intervenciones) el 20/01/2019 21:15:24
Tengo un excel con 2 páginas. (hoja 1= ronda / hoja 2=comparador)

La página 1 tiene una lista de datos sobre la que se trabajará.
La página 2 recibe datos desde otro excel, datos que contiene los mismos de la hoja 1+ nuevos.

Lo que intento es que desde la 'hoja 2', me realize una comparación de los datos (solo los valores de una columna) con la hoja 1 (solo los valores de una columna) para RECONOCER LOS VALORES QUE NO SE REPITEN.

Mi problema es que con mi macro se me estan marcando las nuevas, y necesito todo lo contario!!!
Necesito que se marquen o mejor que se pongan la letras en un gris claro con los valores de la hoja 2 que existen en la hoja 1. Osea, necesito dejar lo snuevos valores en el color negro normal, pues así pretendo aislar en la hoja 2 los nuevos valores, para luego seleccionarlos, copiarlos y pegarlos en la hoja 1.

Nota: Además no se porque la celda A2 de la hoja2 se marca en color.

¿Alguien podría ayudarme?
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COMPARAR DATOS DE 2 COLUMNAS EN 2 HOJAS, MARCANDO LOS REPETIDOS.

Publicado por Antoni Masana (2477 intervenciones) el 21/01/2019 16:20:07
Empecemos por las cuatro primeras variables

fin - Te dice el numero de filas que tienes con datos en la columna A de la hoja Comparador que son 76.
Final - Te dice el numero de filas que tienes con datos en la columna A de la hoja Ronda que son 26.
col_1 - Te dice que tienes una columna de datos
col_2 - Te dice que tienes dos columnas de datos

Problemas:

En el primer FOR tratas de la línea 2, que tiene la cabecera a la 76 e ignora la ultima línea, la 77. La fila 1 esta en blanco por eso colorea la cabecera. El for debería ser:

1
FOR i = 3 To fin + 1

El siguiente FOR no funciona porque para mirar cuantas columnas de datos tienes has tomado la fila 1 que esta vacía y col_1 vale 1 tendrías que tomar la fila 2 que es la cabecera para contar las columna.

Con estos dos pequeños cambios la cosa mejora bastante. Te los marco en negrita.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub Compara_Hoja2()
    ' ---&--- Declaramos variables
    Dim scadena As String, scadena_2 As String
    Dim i As Long, j As Long, n As Long
    Dim col As Long, fin As Long, final As Long, d As Long
    Dim a As Long, x As Long, p As Long, col_1 As Long, col_2 As Long
 
    ' ---&--- Trabajamos con la Hoja2 (Comparador)
    With Sheets("Comparador")
        fin = Application.CountA(.Range("A:A"))
        final = Application.CountA(Sheets("Ronda").Range("A:A"))
        col_1 = .Cells(2, Cells.Columns.Count).End(xlToLeft).Column
        col_2 = Sheets("Ronda").Cells(1, Cells.Columns.Count).End(xlToLeft).Column
 
        ' ---&--- Iniciamos primer loop recorriendo registros hoja2 (Comparador)
        For i = 3 To fin + 1
            ' ---&--- Componemos cadena con toda la fila hoja2
            For d = 1 To col_1
                scadena = scadena & .Cells(i, d).Value
            Next d
            ' ---&--- Iniciamos segundo loop buscando valor de cadena de hoja1 en hoja1 (Ronda)
            For j = 2 To final
                ' ---&--- Componemos cadena de toda la hoja1
                For a = 1 To col_2
                    scadena_2 = scadena_2 & Sheets("Ronda").Cells(j, a).Value
                Next a
                ' ---&--- Si el ID existe en la hoja2 contamos (Comparador)
                If .Cells(i, 1) = Sheets("Ronda").Cells(j, 1) Then p = p + 1
 
                ' ---&--- Si el ID es igual al de la hoja1 pero la cadena no es igual iniciamos un tercer loop
                If .Cells(i, 1) = Sheets("Ronda").Cells(j, 1) And scadena <> scadena_2 Then
 
                    ' ---&--- Recorremos toda la fila hasta encontrar la diferencia y la marcamos en rojo
                    For n = 1 To col_2
                        If .Cells(i, n) <> Sheets("Ronda").Cells(j, n) Then .Cells(i, n).Interior.Color = vbRed
                    Next n
                End If
 
                ' ---&--- vaciamos valor de variable scadena_2
                scadena_2 = vbNullString
            Next j
 
            ' ---&--- Si el ID no existe en hoja2 recorremos cadena y marcamos diferencias
            If p = 0 Then
                For x = 1 To col_2
                    If .Cells(i, x) <> Sheets("Ronda").Cells(j, x) Then .Cells(i, x).Interior.Color = vbGreen
                Next x
            End If
            p = 0
            scadena = vbNullString
        Next i
    End With
End Sub

Prueba estos cambios y ya me dirás que tal te va.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 179
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COMPARAR DATOS DE 2 COLUMNAS EN 2 HOJAS, MARCANDO LOS REPETIDOS.

Publicado por Quico (106 intervenciones) el 21/01/2019 22:49:01
Gracias Antoni.
Con tu explicación de las 4 primeras variables he podido entender mejor el desarrollo.
Ahora bien, hay una cosa que no tengo claro como cambiar!

La macro me marca (en este caso en color verde) los datos que no se repiten en la hoja 1.
El problema es que he pensado que en realidad lo que me resultaría más practico sería marcar en la hoja 2 los valores que sí se repiten en la hoja 1.
¿Porque?
Porque en realidad, todos los valores NUEVOS (los que no estaban en la hoja 1) , los he de copiar y pegar en la página1.
La macro me sirve para ir incorporando en la hoja 1, entradas de datos cada X días, y para no repetirlos, utilizo la macro que me detecta los que son nuevos (ahora en verde).

Lo que me ocurre es que hasta ahora tengo que pegarlos con color verde en la hoja 1, para luego editarlo y dejarlo con color negro normal.
Me ahorraría el paso, si los 'marcados' en la hoja 2 fueran en realidad los que se repiten.

He estado mirando la parte de las condiciones comparativas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' ---&--- Si el ID existe en la hoja2 contamos (Comparador)
If .Cells(i, 1) = Sheets("Ronda").Cells(j, 1) Then p = p + 1
 
' ---&--- Si el ID es igual al de la hoja1 pero la cadena no es igual iniciamos un tercer loop
If .Cells(i, 1) = Sheets("Ronda").Cells(j, 1) And scadena <> scadena_2 Then
 
' ---&--- Recorremos toda la fila hasta encontrar la diferencia y la marcamos en rojo
For n = 1 To col_2
If .Cells(i, n) <> Sheets("Ronda").Cells(j, n) Then .Cells(i, n).Interior.Color = vbRed
Next n
End If
 
' ---&--- vaciamos valor de variable scadena_2
scadena_2 = vbNullString
Next j
 
' ---&--- Si el ID no existe en hoja2 recorremos cadena y marcamos diferencias
If p = 0 Then
For x = 1 To col_2
If .Cells(i, x) <> Sheets("Ronda").Cells(j, x) Then .Cells(i, x).Font.ColorIndex = 3

Modificando <> o = para ver si lo consigo, pero no doy con el sistema de invertir los marcados como los que se repiten.
Solo he podido modificar para que en vez de rellenar la celda, pongo la tipografia en color rojo.

¿Qué he de hacer para que se marquen las que repiten en vez de los nuevos valores?

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 179
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

COMPARAR DATOS DE 2 COLUMNAS EN 2 HOJAS, MARCANDO LOS REPETIDOS.

Publicado por Quico (106 intervenciones) el 21/01/2019 23:40:15
Ohs!
Ya lo he conseguido con


If Not [variable] Is Nothing Then
:-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar