Excel - comparar tablas con vba

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

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 04/06/2019 22:08:00
Hola tengo dos tablas que deseo comparar con una macro y que me diga en msgbox las diferencias.
Las tablas son mas complejas pero adjunto ejemplo simplificado: Necesito comparar que ese legajo en esa fecha que figura en hoja QR, esté el legajo en esa fecha de la hoja SEGURIDAD. Si falta o no coincide en fecha algun legajo de la hoja QR en la hoja SEGURIDAD que lo diga en MSGBOX. Espero haber sido claro. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de MIGUEL
Val: 38
Ha disminuido su posición en 7 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por MIGUEL (10 intervenciones) el 05/06/2019 07:28:29
Buenas

Te dejo el archivo con la macro, para saber si la fecha no coincide se requiere un dato único en la fila del registro en ambas tablas, de la forma en que esta el archivo no es posible ( o al menos es lo que yo creo ) no se puede saber si le cambiaron la fecha o es un registro diferente, la macro solo te dira si algun registro en la hoja QR no se encuentra en la Hoja seguridad

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: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 05/06/2019 14:55:39
Gracias por tu tiempo. Mi lógica era que se podria hacer la comparación buscando que en las filas donde esta X Legajo esté tambien X Fecha en la columna correspondiente. Olvide mencionar que en la tabla SEGURIDAD las filas a comparar van a tener filtros aplicados (Autofilter)
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: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 05/06/2019 16:42:23
Te comento que adapte un poco la macro que me enviaste y, por ahora, logre que funcione y obtener los resultados esperados. Muchisimas gracias por tu ayuda! Te consulto una cosa mas: si ambas tablas coinciden quisiera agregar el texto "ok" al lado de cada fila comprobada. Es posible? Gracias de nuevo
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
Imágen de perfil de MIGUEL
Val: 38
Ha disminuido su posición en 7 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por MIGUEL (10 intervenciones) el 05/06/2019 20:07:39
Claro que es posible.

No se que le hayas cambiado pero solo tienes que poner un if anidado como en la siguiente 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
31
32
Sub diferencia()
    Dim msj As String
    Dim f As Long
    Dim x As Long
    Dim con As Byte
    f = Sheets("QR").Range("A" & Rows.Count).End(xlUp).Row
    x = Sheets("seguridad").Range("A" & Rows.Count).End(xlUp).Row
    con = 0
    msj = "Diferencias" & vbNewLine
    For d = 1 To f
        For q = 3 To x
            If Sheets("QR").Cells(d, 2) & Sheets("QR").Cells(d, 1) = Sheets("seguridad").Cells(q, 1) & Sheets("seguridad").Cells(q, 3) Then
                con = 1
                If con = 1 Then ' Este es el que se agrega
                    Sheets("QR").Cells(d, 3) = "OK"
                    Sheets("seguridad").Cells(q, 4) = "OK"
                End If
            End If
        Next q
        If con = 0 Then
            Sheets("QR").Activate
            Sheets("QR").Range("A" & d & ":B" & d).Interior.Color = vbYellow
            msj = msj & " El Legajo " & Sheets("QR").Cells(d, 2) & " Con Fecha " & Sheets("QR").Cells(d, 1) & " No Esta Registrado" & vbNewLine
        End If
        con = 0
    Next d
    If msj = "Diferencias" & vbNewLine Then
        MsgBox "No Se Encontraron Diferencias", vbOKOnly + vbInformation, "Todo Bien"
    Else
        MsgBox msj, vbOKOnly + vbExclamation, "Diferencia En Tablas"
    End If
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: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 05/06/2019 21:32:29
Hermano sos un genio, realmente me ayudas un monton. ¿No quieres ser mi consultor privado de macros? Estaria dispuesto a pagar porque realmente me ayudan mucho tus respuestas.

Agrego consulta: Si quisiera que los "OK" solo se coloquen en el caso que TODAS las filas comparadas esten correctas ¿Como haría?
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 MIGUEL
Val: 38
Ha disminuido su posición en 7 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por MIGUEL (10 intervenciones) el 05/06/2019 22:17:24
Pues por aprender nunca me han cobrado asi que por ayudar a aprender no pienso cobrar.

Ya si me dices que requieres que te haga una aplicacion ofimatica ya entonces negociamos el valor de la complicacion del trabajo y el tiempo que se llevara crear la aplicacion.

este seria el procedimiento

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
Sub diferencia()
    Dim msj As String
    Dim f As Long
    Dim x As Long
    Dim con As Byte
    f = Sheets("QR").Range("A" & Rows.Count).End(xlUp).Row
    x = Sheets("seguridad").Range("A" & Rows.Count).End(xlUp).Row
    con = 0
    msj = "Diferencias" & vbNewLine
    For d = 1 To f
        For q = 3 To x
            If Sheets("QR").Cells(d, 2) & Sheets("QR").Cells(d, 1) = Sheets("seguridad").Cells(q, 1) & Sheets("seguridad").Cells(q, 3) Then
                con = 1
            End If
        Next q
        If con = 0 Then
            Sheets("QR").Activate
            Sheets("QR").Range("A" & d & ":B" & d).Interior.Color = vbYellow
            msj = msj & " El Legajo " & Sheets("QR").Cells(d, 2) & " Con Fecha " & Sheets("QR").Cells(d, 1) & " No Esta Registrado" & vbNewLine
        End If
        con = 0
    Next d
    If msj = "Diferencias" & vbNewLine Then
        MsgBox "No Se Encontraron Diferencias", vbOKOnly + vbInformation, "Todo Bien"
        For w = 1 To f  'este seria
            Sheets("QR").Cells(w, 3) = "OK"
        Next w
        For r = 3 To x
            Sheets("seguridad").Cells(r, 4) = "OK"
        Next r
    ' pero insisto que en este momento este resultado seria erroneo
    Else
        MsgBox msj, vbOKOnly + vbExclamation, "Diferencia En Tablas"
    End If
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
0
Comentar
sin imagen de perfil
Val: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 07/06/2019 19:00:59
Claro, de esta forma coloca el OK mas filas de las que corresponde. Yo solo quiero que las coloque en las que cumplen las dos condiciones de Legajo y Fecha (como lo hacia en la macro anterior)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 09/06/2019 04:39:59
Estuve intentando que luego de comprobar que las filas sean iguales entre ambas tablas, salga un msgbox vbYesNo preguntando si quiero colocarle el "OK" a las filas comprobadas en hoja SEGURIDAD. Pero no lo he logrado aun
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 09/06/2019 07:57:47
ya lo logre cerrando asi todas mis dudas a dia de hoy. Me ayudaste un monton a resolver esto asi que te vuelvo a agradecer por tu tiempo (no descarto volver a molestarte en un futuro cuando las papas quemen y necesite un guru)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 38
Ha disminuido su posición en 7 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por MIGUEL (10 intervenciones) el 05/06/2019 20:47:22
Pues creo que no entendi bien.

Segun yo la macro toma el numero de legajo y su correspondiente fecha, despues va a la hoja seguridad y empieza a comparar fila por fila si el numero de legajo es igual y si su fecha es igual, si ese registro tiene las dos coincidencias la toma como correcta si no sigue con la siguiente fila y hace lo mismo,cuando termina de comparar la base va a la hoja QR y toma el segundo registro y empieza de nuevo con el comparativo, el autofiltro no le afecta a la macro para realizar la comparacion, a menos que quieras comparar x o y legajo entonces si habria que cambiar la macro.

Ahora con la modificacion del if te daras cuenta de que en la hoja seguridad pondra "OK" solo a 16 filas de 32, esto es porque solo 16 registros en la hoja QR existen en la hoja seguridad,por ejemplo:
El legajo 2114715 hay tres en la hoja QR con diferentes fechas y el la hoja seguridad hay 12 con diferentes fechas,¿Como saber cual de las tres fechas que hay en QR es la correcta para asignar a los 9 registros faltantes en la hoja seguridad?

Para saber si la fecha de x legajo se cambio se requiere un valor unico que no se repita en los registros pero si en las bases, ya que como lo subiste en ambas bases se repite el mismo legajo varias veces con diferentes fechas, si hay un folio unico para cada registro ya seria pan comido saber si la fecha de ese registro esta mal o se trata de un registro completamente diferente al buscado.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha disminuido su posición en 4 puestos en Excel (en relación al último mes)
Gráfica de Excel

comparar tablas con vba

Publicado por Gabo (9 intervenciones) el 06/06/2019 04:40:41
Lo del autofiltro no es vital, puede funcionar todo igual. Solo que me seria mas practico hacer que el proceso de comprobacion pueda correr solo en filas filtradas de la hoja Seguridad en vez de correr en toda la tabla.

Respecto a lo otro, a mi lo que me interesa es que las filas de QR esten en SEGURIDAD, despues si en Seguridad sobran filas no importa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar