Sie sind auf Seite 1von 3

Macro para comparar dos listas y extraer los registros que coinciden en ambas

Esta macro nos permite comparar dos listas con nombres y registrar en una tercera tabla los
registros que estn en ambas, descartando todos los que estn solo en una de las dos.
En este caso abrimos un libro nuevo e incluimos 3 hojas de clculo con los siguientes nombres:
Tabla 1, Tabla 2 y Coincidentes. En tabla 1 y tabla 2 escribimos la lista de nombres como
sigue.

En la hoja llamada Tabla 1 seleccionamos el rango A1:A10 y le asignamos el nombre Tabla1. En la


hoja llamada Tabla 2 seleccionamos A1:A10 y le asignamos el nombre Tabla2. En la hoja llamada

coincidentes agregamos un botnActiveX llamado cmd_coincidencias y con un label que diga


Extraer Coincidencias.

En modo diseo damos doble clic al botn para codificarlo y nos aparece el procedimiento de
evento como sigue:
Private Sub Cmd_coincidentes_Click()
End sub
Declaramos las siguientes variables:
Para almacenar cuantos registros tiene tabla 1
Dim numtabla1 As Integer
Para almacenar cuantos registros tiene tabla 2
Dim numtabla2 As Integer
Para almacenar el rango de la tabla 1
Dim cuadro1 As Range
Para almacenar el rango de la table 2
Dim cuadro2 As Range
Para contar los elementos coincidentes
Dim num_encontrados As Integer
Para almacenar el nombre actual de la tabla 1

Dim nombretabla1 As String


Para almacenar el nombre actual de la tabla 2
Dim nombretabla2 As String
Ahora asignamos el rango de la table 1 y de la table 2 a las variables de objeto cuadro1 y cuadro2.
Set cuadro1 = ActiveWorkbook.Worksheets("Tabla 1").Range("Tabla1")
Set cuadro2 = ActiveWorkbook.Worksheets("Tabla 2").Range("Tabla2")
Obtenemos el numero de registros que hay en cada tabla
numtabla1 = cuadro1.Rows.Count
numtabla2 = cuadro2.Rows.Count
Inicializamos la variable que nos va a contar los registros que encontramos
num_encontrados = 1

Inicia el ciclo de bsqueda de los elementos de la primera tabla


For i = 1 To numtabla1
Obtenemos el valor actual de la tabla uno a buscar
nombretabla1 = UCase(cuadro1.Range("Tabla1").Cells(i, 1).Value)
Inicia el ciclo de bsqueda en la segunda tabla
For g = 1 To numtabla2
Lee el valor actual en la segunda tabla
nombretabla2 = UCase(cuadro2.Range("Tabla2").Cells(g, 1).Value)
compara el valor con el valor buscado
If nombretabla1 = nombretabla2 Then
Si son iguales
ActiveWorkbook.Worksheets("coincidentes").Cells(num_encontrados, 1).Value = nombretabla1
Transfiere el valor ledo a la tabla de coincidencias
num_encontrados = num_encontrados + 1
End If
Next g
Next i
End Sub

Fuente http://sintad.com.mx/macros%20excel/index.html

Das könnte Ihnen auch gefallen