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 de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
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ó.
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.