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