Hacer una macro para conparar 2 columnas en excel

Necesito crear una macro que me compare los registros existentes en dos columnas diferentes, es decir, cuando se ejecute la macro debe de compararse los valores de una columna con los valores de la otra. La verdad es que llevo detrás de ellos un tiempo y me estoy volviendo loco, agradecería vuestra colaboración. Os pongo un ejemplo que igual entendéis mejor el concepto:
Lista 1 lista 2 códigos que faltan en la lista 2 de la lista 1
101 101 102
102 103 104
104 105 106
103 107
105 106
107
Algo parecido a esto, habría que introducir un botón que al pinchar se ejecute la macro que se compare las dos columnas y luego se genere otra en la que se muestren los códigos que faltan. Espero que me echéis un cable porque lo necesito, estoy bastante atrancado. GRACIAS! (mi mail es [email protected])

1 respuesta

Respuesta
2
Pero vamos a comparar en este caso lo que has puesto en la Col A con la Col B y te pondré los valores que faltan en la misma hoja Col C en la fila 2 por si tienes cabeceras, según tu ejemplo lo tienes mal el 102 y el 104 es verdad que no están en la lista 2 comparado con la lista 1, pero el 106 no estaba en la lista 1 por lo tanto no lo buscará en la lista 2, para eso tendrías que comparar primero la lista 1 con la lista 2 y posteriormente la lista 2 con la lista 1, a ver si es esto lo que quieres y trabajamos 2 veces:
Para comparar la lista 1 con la lista 2 (SOLAMENTE), es esta la macro:
Private Sub CommandButton1_Click()
Dim celda, valor As String
Range("A2").Select
Do While ActiveCell.Value <> ""
celda = ActiveCell.Address
valor = ActiveCell.Value
Range("B2").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = valor Then
Exit Do
Range(celda).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value = "" Then
Range("C2").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Value = valor
End If
Range(celda).Select
ActiveCell.Offset(1, 0).Select
valor = ActiveCell.Value
Loop
End Sub
Pero como me espero que al final quieres comprobar las dos listas te la hago directamente y tardamos menos:
Private Sub CommandButton1_Click()
Dim celda, valor As String
Range("A2").Select
Do While ActiveCell.Value <> ""
celda = ActiveCell.Address
valor = ActiveCell.Value
Range("B2").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = valor Then
Exit Do
Range(celda).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value = "" Then
Range("C2").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Value = valor
End If
Range(celda).Select
ActiveCell.Offset(1, 0).Select
valor = ActiveCell.Value
Loop
Range("B2").Select
Do While ActiveCell.Value <> ""
celda = ActiveCell.Address
valor = ActiveCell.Value
Range("A2").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = valor Then
Exit Do
Range(celda).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
If ActiveCell.Value = "" Then
Range("C2").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Value = valor
End If
Range(celda).Select
ActiveCell.Offset(1, 0).Select
valor = ActiveCell.Value
Loop
End Sub
Si te ha servido puntúa y finaliza la consulta, un comentario siempre es bienvenido. Gracias.
>Un saludo
>Julio
Ok, funciona, muchísimas gracias pero todavía me surgen algún problema. El primero es que necesito introducir un botón en la hoja de calculo de manera que al hacer click se ejecute la macro, y ahora no me sale. Y la segunda cosa es que si la macro se ejecuta 2 veces seguidas se escriben dos veces los valores en la columna C. ¿cómo lo podría resolver?
Ya he solucionado lo del botón, era una tontería. Me ha pasado porque hace ya un tiempo que no hacia macros en visual basic y no me acordaba mucho. En cuanto a lo de que cada vez que se ejecuta la macro se escriben los datos creo que el problema se podría solucionar de la siguiente manera. Poner un botón para ejecutar la macro que compare las dos columnas y luego un botón llamado borrar que borre el contenido de la 3 columna. ¿Qué te parece? ¿Me echarías un cable también a esto? Gracias por adelantado.
He de comunicarte que ya conseguí hacer funcionar correctamente la macro. Es caso real era algo más complicado que el ejemplo que te expuse pero sin tu ayuda no lo habría conseguido. Mi más sincero agradecimiento. Valoración excelente! GRACIAS

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas