Buscar Nombres Aproximadamente

Esta macro puede utilizarse para buscar un nombre en una tabla, sin la necesidad de introducir el nombre exacto:

Abuscar - es el nombre que queremos buscar
Area - son las celdas donde vamos a incluir los resultados de la búsqueda


Sub BuscarNombresenTable (Abuscar As String, area As Range)

Application.ScreenUpdating = False
   
    Dim oRg As Range
    Dim oRgPrim  ' Range del primer nombre encontrado
    Dim losnombres (1 To 20) As String   'Solo se van a buscar 20 nombres
   

'check si area tiene 20 líneas
    If area.Rows.Count < 20 Then Exit Sub
   
    [area].ClearContents
   
' Primera busqueda

    With Sheets("#Query").Range("D:D")
            Set oRg = .Find(What:=Abuscar, _
                            After:=Range("D6"), _
                            LookIn:=xlValues, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False, _
                            SearchFormat:=False)
           
    End With
   
' Si la busqueda ha dado resultado loop para más busquedas
' vamos a repetir la búsqueda un máximo de 20 veces
   
    If Not oRg Is Nothing Then   ' verificamos si la primera busqueda ha dado algo
   
        i = 1
        oRgPrim = oRg.Address
        losnombres(i) = oRg.Value
       
        Do Until i = 20
            Set oRg = Sheets("#Query").Range("D:D").FindNext(oRg)
            If oRg.Address = oRgPrim Then i = 20
           
            If UBound(Filter(losnombres, oRg.Value)) < 0 Then
                i = i + 1
                losnombres(i) = oRg.Value
            End If
           
        Loop
       
    End If
   
' los valores encontrados se copian en el rango nombresbuscados
   
        For j = 1 To 20
            area(j, 1).Value = losnombres(j)
        Next j

   
End Sub