Macro para Excel con dos listados

Saludos
Me podrías ayudar a crear un macro en Excel donde hayan dos listados, ¿vaya comparando cada valor uno a uno y luego haga un tercer listado con los valores semejantes en los dos primeros listados?. Cada uno de los listados está en una hoja diferente

2 respuestas

Respuesta
1
Aquí tienes el código que hace lo que solicitas, considerando las siguientes condiciones.
a.- Las listas a comparar en ambas hojas se encuentran en la columna "A". No tienen títulos. La columna B está libre, sin datos.
b.- El rango de la lista es "sólido", es decir constinuo, sin celdas en blanco en el medio.
c.- Al iniciar la macro, la columna "A" de la Hoja3 (donde se listan las coincidencias) estará en blanco.
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código:
Sub ListaIdem()
Dim Nlist1, Nlist2 As Range
Application.ScreenUpdating = False
Set Nlist1 = Sheets("Hoja1").Range("A1").CurrentRegion
Set Nlist2 = Sheets("Hoja2").Range("A1").CurrentRegion
If Nlist1.Rows.Count > Nlist2.Rows.Count Then
For Each cell In Nlist1
Set busqueda = Nlist2.Find(cell.Value, LookIn:=xlValues)
If Not busqueda Is Nothing Then
Sheets("Hoja3").Select
If IsEmpty(Sheets("Hoja3").Range("A1")) Then
Sheets("Hoja3").Range("A1").Value = cell.Value
Else
Cells(Sheets("Hoja3").Range("A1").CurrentRegion.Rows.Count + 1, 1).Value = cell.Value
End If
End If
Next cell
Else
For Each cell In Nlist2
Set busqueda = Nlist1.Find(cell.Value, LookIn:=xlValues)
If Not busqueda Is Nothing Then
Sheets("Hoja3").Select
If IsEmpty(Sheets("Hoja3").Range("A1")) Then
Sheets("Hoja3").Range("A1").Value = cell.Value
Else
aaa = Sheets("Hoja3").Range("A1").CurrentRegion.Rows.Count
Cells(Sheets("Hoja3").Range("A1").CurrentRegion.Rows.Count + 1, 1).Value = cell.Value
End If
End If
Next cell
End If
Set Nlist1 = Nothing
Set Nlist2 = Nothing
Application.ScreenUpdating = False
Sheets("Hoja3").Select
End Sub
Cierra el editor y graba el archivo ( a modo de Backup) antes de disparar la macro que acabas de pegar(ListaIdem).
Prueba y dime si funciona para tu caso. Tal vez tengas que hacerle algunas modificaciones como para adaptarlo a tu caso (nombres de hojas, por ejemplo)
Esto debería resolver tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
Un abrazo!
Fernando
"Me lo explicaron y lo olvidé,
lo leí y lo entendí,
lo hice y lo aprendí".
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó.
Respuesta
1
Este código compara todos los valores de una lista de la Hoja1 con todos los de la Hoja2 y los que encuentra iguales los escribe en la Hoja3. Siempre empezando por la casilla A1:
i = 1
j = 1
k = 1
While Sheets("Hoja1").Range("A" & i).Value <> ""
While Sheets("Hoja2").Range("A" & j).Value <> ""
If Sheets("Hoja1").Range("A" & i).Value = Sheets("Hoja2").Range("A" & j).Value Then
Sheets("Hoja3").Range("A" & k).Value = Sheets("Hoja2").Range("A" & j).Value
k = k + 1
End If
j = j + 1
Wend
j = 1
i = i + 1
Wend
No creo que sea exactamente lo que necesites, pero seguro que te sirve de ayuda para adaptarlo a tus necesidades. Si no te sale, enviame una aclaración más exacta de lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas