Buscar Coincidencias en dos Matrices de Excel O Access

Necesito realizar el cruce de dos matrices en excel y determinar en una tercera hoja las coincidencias que encuentre no solo iguales, sino parecidas.

Tengo en una base de datos dos campos: Documento y Nombres; y en la otra base de datos los mismos campos. La idea es tomar la base de datos 1 y realizar un cruce con la base de datos dos y me arroje en otra hoja el resultado de las coincidencias encontradas, las cuales deben tener la siguiente particularidad:

Caso 1:

Si busco: El nombre: JUAN DAVID

Y en la base encuentra: JUAN DAVID DIAZ. Juan david perez, david juan perez. Los debe dar como resultado de coincidencia.

Caso 2: Si busco PEDRO ANDREZ PEREZ

Y en la base encuentra: PEDRO ANDREZ PEREZ CALDERON, PEDRO ANDREZ PEREZ BARAHONA, PEDRO ANDREZ PEREZ GARCÍA. Los debe dar como resultado de coincidencia

Caso 3: Si busco: DANIEL ADOLFO RAMÍREZ AGUDELO

Y en la base encuentra: ADOLFO DANIEL RAMÍREZ PEREZ, DANIEL ADOLFO RAMÍREZ ACEVEDO, DANIEL ADOLFO PEREZ RAMÍREZ. Los debe dar como resultado de coincidencia.

Para el caso 3, solo aplica donde encuentra nombres con más de tres palabras.

Para el caso de buscar un solo nombre, me debe traer todos los que encuentre sin importar el orden del texto. Cuando realizó la consulta, en la base 2 se encuentra una columna con un IDREGISTRO que es necesario adjuntar también en la hoja de resultado.

Disculpen por favor la molestia, pero es muy dispendioso realizar esta consulta uno a uno y con el buscarv no puedo realizarlo. De igual manera no se si es más fácil hacerlo desde access.

1 Respuesta

Respuesta
1

Te anexo una macro para buscar hasta 6 combinaciones, por ejemplo:

En el caso de pedro andrez perez, buscaría estas combinaciones.

  • Pedro andrez
  • andrez pedro
  • pedro perez
  • perez pedro
  • andrez perez
  • perez andrez

Deberás tener 3 hojas: "Hoja1", "Hoja2" y "Hoja3"

En la hoja1 pon tus nombres de la base de datos1, en la columna A el documento y en la B el nombre, esto nombres se buscarán en la base de datos 2.

En la hoja2 pon tus nombres de la base de datos2, en la columna A el documento y en la B el nombre.

En la hoja3 tendrás el siguiente resultado:

  • En la columna A, el documento de la hoja1
  • En la columna B, el nombre de la hoja1
  • En la columna C, el documento de la hoja2
  • En la columna D, el nombre coincidente de la hoja2

Para no repetir los nombres encontrados, si un nombre de la base de datos2 ya fue encontrado, entonces se marcará en la columna "F" con una "x".



Sub Coincidencias()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    Set h3 = Sheets("Hoja3")
    u1 = h1.Range("B" & Rows.Count).End(xlUp).Row
    u2 = h2.Range("B" & Rows.Count).End(xlUp).Row
    u3 = h3.Range("B" & Rows.Count).End(xlUp).Row
    If u3 < 2 Then u3 = 2
    h3.Range("A2:D" & u3).ClearContents
    h2.Columns("F").ClearContents
    '
    For i = 2 To u1
        ns = Split(h1.Cells(i, "B"))
        Select Case UBound(ns)
            Case 0: fin = 0
            Case 1: fin = 1
            Case Is > 1: fin = 5
        End Select
        '
        For j = 0 To fin
            cad = cadena(j, ns)
            Set r = h2.Range("B2:B" & u2)
            Set b = r.Find(cad, LookAt:=xlPart)
            If Not b Is Nothing Then
                ncell = b.Address
                Do
                    If h2.Cells(b.Row, "F") = "" Then
                        u3 = h3.Range("B" & Rows.Count).End(xlUp).Row + 1
                        h3.Cells(u3, "A") = h1.Cells(i, "A")
                        h3.Cells(u3, "B") = h1.Cells(i, "B")
                        h3.Cells(u3, "C") = h2.Cells(b.Row, "A")
                        h3.Cells(u3, "D") = h2.Cells(b.Row, "B")
                        h2.Cells(b.Row, "F") = "x"
                    End If
                    Set b = r.FindNext(b)
                Loop While Not b Is Nothing And b.Address <> ncell
            End If
        Next
    Next
    MsgBox "Fin"
End Sub
Function cadena(j, ns)
'Por.Dante Amor
    Select Case j
        Case 0
            x = 0
            y = 1
        Case 1
            x = 1
            y = 0
        Case 2
            x = 0
            y = 2
        Case 3
            x = 2
            y = 0
        Case 4
            x = 1
            y = 2
        Case 5
            x = 2
            y = 1
    End Select
    If UBound(ns) = 0 Then
        cadena = ns(x)
    Else
        cadena = ns(x) & " " & ns(y)
    End If
End Function

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Coincidencias
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Buen día, Dante

Te agradezco muchísimo la respuesta, es excelente. Sin embargo quería pedirte el inmenso favor de recordar el IDREGISTRO que posee la base2, ya que es necesario que en el resultado de la hoja 3, me indique este campo para poder posteriormente dar un buscarv para traer información adicional del mismo.

No es posible realizar el buscarv directamente desde la Cédula o el Nombre ya que el registro puede estar repetido en varias lineas de la base 2, por lo cual siempre se identifica por el número de IDREGISTRO.

De igual manera abuso de tu ayuda para ver si fuese posible que en la hoja tres o en la misma inicial (Hoja1), me sombree o indique de cuales no encontró coincidencia.

En la Hoja 3, en la columna E necesito indicar:

Coincidencia Tipo: 1 si el nombre buscado y el documento es exacto

Coincidencia Tipo: 2 si el nombre buscado es exacto

Coincidencia Tipo: 3 si el documento es exacto

Coincidencia Tipo: 4 si el nombre es parecido

Y en la columna F de la Hoja3, se debe colocar el IDREGISTRO que encontro de la Hoja 2. Osea que la Hoja2 lleva los siguientes campos: Columna A: Documento, Columna B: Nombre, Columna C: IDREGISTRO.

Nuevamente mil y mil gracias por tu gran ayuda.

Una Feliz Navidad para ti y tu familia.

Puedes crear una nueva pregunta por cada requerimiento, en la nueva pregunta describes lo que necesitas, si lo deseas en el titulo de la pregunta escrbe que va dirigida a Dante Amor. Feliz 2015.

Añade tu respuesta

Haz clic para o