Excel - BUSCAR DIFERENCIAS ENTRE COLUMNAS

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

BUSCAR DIFERENCIAS ENTRE COLUMNAS

Publicado por Quico (106 intervenciones) el 21/02/2019 00:31:08
Tengo una hoja excel con 2 columnas (B y D), de las que necesito comparar las listas.
Estas listas comienzan en la 'celda 7', por lo tanto:
-B7 hasta que no encuentre nada en B
-D7 hasta que no encuentre nada en D

He creado una macro que lo que intenta es darme los resultados de la comparativa
en la COLUMNA F, también desde la fila 7.
Es decir, que comparamos cada valor de la columna D con todos los de la B.
Y cuando obtiene los que no estan en B, los añade en columna F.

*nota: Ahora que estoy redactando esto, acabo de pensar la comparación contraria, que quizá también pueda ocurrir. Acabo de añadir una nueva columna...
Aunque en mi macro (que no me funciona) no se contempla esta columna nueva.

¿Como se podría incorporar la comparativa en nueva columna 'H' de comparativa de B respecto a D?
Y por supuesto la pregunta inicial de la macro, La comparativa entre D respecto a B?

Esta es la macro sin el comentario de *nota.

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
54
55
Option Explicit
Sub compararlistados()
 
'definimos variales
Dim VlastfilB As Integer 'última fila columna B
Dim VlastfilD As Integer 'última fila columna D
Dim VcodB As String 'códigos columna B
Dim VcodD As String 'códigos columna D
Dim Vclav As Integer 'clave 0 igual 1 diferente
Dim i As Integer 'bucle For I
Dim j As Integer 'bucle Do While
Dim k As Integer 'contador para pegar resultados
 
    Range("B500").Select
    Selection.End(xlUp).Select
    VlastfilB = ActiveCell.Row 'averiguamos la última fila de columna B
 
    Range("D500").Select
    Selection.End(xlUp).Select
    VlastfilD = ActiveCell.Row 'averiguamos la última fila de columna D
 
        k = 7 ' iniciamos esta variable para pegar los resultados desde la fila 7 en la columna F
 
 
        For i = 7 To VlastfilD  'bucle recorriendo las filas de la columna D
 
            VcodD = Cells(i, 7).Value 'almacenamos cada uno de los códigos de la columna D para compararlos con todos
            'los de la columna A
                j = 7 ' iniciamos la variable para el bucle desde la fila 7 de la columna B
 
                Do While j <= VlastfilB 'hacer el bucle tantas veces como datos haya en la columna B
 
                   VcodB = Cells(j, 1).Value 'almacenamos en la variable cada código de la columna B
 
                    If VcodD = VcodB Then 'comparamos cada valor de la columna D con todos los de la B
                        Vclav = 1 ' le damos un valor 1 si encuentra uno igual
                        Exit Do ' Si es = 1 salir del Loop
                    Else
                        Vclav = 0 'si no encuentra uno igual le damos un valor 1
                    End If
 
                    j = j + 1 ' contador para el Loop
 
                Loop
 
            If Vclav = 0 Then 'si el valor de Vclav es igual a 0 entonces mostraremos los códigos nuevos
 
                Cells(k, 6).Value = VcodB ' lo pegamos en la celda F7, k está iniciado en 7
                k = k + 1 ' contador dentro de If que irá sumando de uno en uno desde 2
            End If
 
        Next i
        Range("F7").Select
 
End Sub

¿Porque no me funciona esta macro comparativa de D a B?

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

BUSCAR DIFERENCIAS ENTRE COLUMNAS

Publicado por Antoni Masana (2477 intervenciones) el 21/02/2019 07:38:08
Si quieres buscar en una columna y pones otra diferente no funciona.

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
Option Explicit
 
Sub compararlistados()
 
    'definimos variales
    Dim VlastfilB As Integer 'última fila columna B
    Dim VlastfilD As Integer 'última fila columna D
    Dim VcodB As String 'códigos columna B
    Dim VcodD As String 'códigos columna D
    Dim Vclav As Integer 'clave 0 igual 1 diferente
    Dim i As Integer 'bucle For I
    Dim j As Integer 'bucle Do While
    Dim k As Integer 'contador para pegar resultados
 
    Range("B500").Select
    Selection.End(xlUp).Select
    VlastfilB = ActiveCell.Row 'averiguamos la última fila de columna B
 
    Range("D500").Select
    Selection.End(xlUp).Select
    VlastfilD = ActiveCell.Row 'averiguamos la última fila de columna D
 
    k = 7 ' iniciamos esta variable para pegar los resultados desde la fila 7 en la columna F
    For i = 7 To VlastfilD 'bucle recorriendo las filas de la columna D
 
        ' ---&--- almacenamos cada uno de los códigos de la columna D para compararlos con todos los de la columna A
'        VcodD = Cells(i, 7).Value ' --- el 7 es la columna G
         VcodD = Cells(i, 4).Value ' --- el 4 es la columna D o tambien  VcodD = Cells(i, "D").Value
 
        j = 7 ' iniciamos la variable para el bucle desde la fila 7 de la columna B
        VClav=0
        Do While j <= VlastfilB 'hacer el bucle tantas veces como datos haya en la columna B
 
             ' ---&--- almacenamos en la variable cada código de la columna B
'           VcodB = Cells(j, 1).Value '--- el 1 es de la columna A 
            VcodB = Cells(j, 2).Value ' --- el 2 es la columna B o tambien  VcodD = Cells(i, "B").Value
 
            ' ---&--- comparamos cada valor de la columna D con todos los de la B
            If VcodD = VcodB Then Vclav = 1 : Exit Do
 
            j = j + 1 ' contador para el Loop
        Loop
 
        If Vclav = 0 Then 'si el valor de Vclav es igual a 0 entonces mostraremos los códigos nuevos
            Cells(k, 6).Value = VcodB ' lo pegamos en la celda F7, k está iniciado en 7
            k = k + 1 ' contador dentro de If que irá sumando de uno en uno desde 2
        End If
    Next i
    Range("F7").Select
End Sub


Y esta seria mi MACRO

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
Sub compararlistados_2()
    Dim Col_B As Long, Col_D As Long, Exist As Boolean, _
        Col_F As Long, Col_H As Long
 
    ' ---&--- Comparo la Columna B con la Columna D
    Col_B = 7: Col_H = 7
    While Cells(Col_B, "B") <> ""
        Col_D = 7
        Exist = False
        While Cells(Col_D, "D") <> "" And Exist = False
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = True
            Col_D = Col_D + 1
        Wend
        If Not Exist Then Cells(Col_H, "H") = Cells(Col_B, "B"): Col_H = Col_H + 1
        Col_B = Col_B + 1
    Wend
 
    ' ---&--- Comparo la Columna D con la Columna B
    Col_D = 7: Col_F
    While Cells(Col_D, "D") <> ""
        Col_B = 7
        Exist = 0
        While Cells(Col_B, "B") <> "" And Exist = 0
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = 1
            Col_B = Col_B + 1
        Wend
        If Not Exist Then Cells(Col_F, "F") = Cells(Col_B, "D"): Col_F = Col_F + 1
        Col_D = Col_D + 1
    Wend
End Sub


Saludos.
\\//_
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

BUSCAR DIFERENCIAS ENTRE COLUMNAS

Publicado por Quico (106 intervenciones) el 21/02/2019 18:05:55
Muchas gracias Antonio.

he visto que tu versión es más reducida y parece mas fácil de entender.

No obstante no funcionaba (como tienes el original, puedes probarlo) porque daba un error y tampoco hacia la comparativa D con B

Después de varias pruebas de 'ensayo-error' he llegado a esta macro que por lo que veo, si lo hace bien.

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
Sub compararlistados_2()
    Dim Col_B As Long, Col_D As Long, Exist As Boolean, _
        Col_F As Long, Col_H As Long
 
    ' ---&--- Comparo la Columna D con la Columna B
    Col_D = 7: Col_F = 7
    While Cells(Col_D, "D") <> ""
        Col_B = 7
        Exist = False
        While Cells(Col_B, "B") <> "" And Exist = False
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = True
            Col_B = Col_B + 1
        Wend
        If Not Exist Then Cells(Col_F, "F") = Cells(Col_D, "D"): Col_F = Col_F + 1
        Col_D = Col_D + 1
    Wend
 
 
        ' ---&--- Comparo la Columna B con la Columna D
    Col_B = 7: Col_H = 7
    While Cells(Col_B, "B") <> ""
        Col_D = 7
        Exist = False
        While Cells(Col_D, "D") <> "" And Exist = False
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = True
            Col_D = Col_D + 1
        Wend
        If Not Exist Then Cells(Col_H, "H") = Cells(Col_B, "B"): Col_H = Col_H + 1
        Col_B = Col_B + 1
    Wend
End Sub


Si de este ejemplo comentado, tuvieras 4 páginas con la misma estructura `pero diferentes datos'

¿Como harias para tener en una HOJA master, la misma info de cada columna B sincronizada?
Y luego , en la misma HOJA MASTER una única columna con todfos los datos sin hacer repticiones de numeros?

Por ejemplo:
Hoja 1 --> Tiene la columna B(hoja1)
Hoja 2 --> Tiene la columna B(hoja2)
Hoja 3 --> Tiene la columna B(hoja3)
Hoja 4 --> Tiene la columna B(hoja4)

Hoja MASTER
Columna B todas las columnas B hoja 1-2-3-4 juntas, sin repetir numeros qu epudiean repetirse y ordenadas.

Columna F sincronizada la info de columna B(hoja1)
Columna H sincronizada la info de columna B(hoja2)
Columna K sincronizada la info de columna B(hoja3)
Columna M sincronizada la info de columna B(hoja4)

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
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

BUSCAR DIFERENCIAS ENTRE COLUMNAS

Publicado por Antoni Masana (2477 intervenciones) el 22/02/2019 14:42:16
Si tenia alguno errores. He marcado donde estaban y los he corregidos.

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
Sub compararlistados_2()
    Dim Col_B As Long, Col_D As Long, Exist As Boolean, _
        Col_F As Long, Col_H As Long
 
    ' ---&--- Comparo la Columna B con la Columna D
    Col_B = 7: Col_H = 7
    While Cells(Col_B, "B") <> ""
        Col_D = 7
        Exist = False
        While Cells(Col_D, "D") <> "" And Exist = False
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = True
            Col_D = Col_D + 1
        Wend
        If Not Exist Then Cells(Col_H, "H") = Cells(Col_B, "B"): Col_H = Col_H + 1
        Col_B = Col_B + 1
    Wend
 
    ' ---&--- Comparo la Columna D con la Columna B
    Col_D = 7: Col_F = 7
    While Cells(Col_D, "D") <> ""
        Col_B = 7
        Exist = False
        While Cells(Col_B, "B") <> "" And Exist = False
            If Cells(Col_B, "B") = Cells(Col_D, "D") Then Exist = True
            Col_B = Col_B + 1
        Wend
        If Not Exist Then Cells(Col_F, "F") = Cells(Col_D, "D"): Col_F = Col_F + 1
        Col_D = Col_D + 1
    Wend
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar