Macro para buscar una lista de nombres en una lista

Necesito por favor una ayuda para generar una macro en Excel que me permita identificar en que celdas de una determinada columna se encuentra cada nombre de un listado predefinido. Vale la pena aclarar que en cada celda de esa columna hay un texto que contiene el nombre entre otras palabras.
Es por eso que empecé por generar una macro que me identificara una determinada palabra dentro del texto de la celda.
Esto lo logre haciendo que la macro inserte en una celda contigua la siguiente formula: ActiveCell.FormulaR1C1 = "=IF(ISERROR(SEARCH(Tablas!R2C1,'Po Status Mexico'!R[-1]C[-1],1)),"""",MID(R[-1]C[-1],SEARCH(Tablas!R2C1,'Po Status Mexico'!R[-1]C[-1],1),Tablas!R2C2))".
El problema que esto me permite buscar un solo nombre y si quiero buscar otro, modificando el valor de la fila de la tabla con los nombres a buscar, tengo que repetir todo el código devuelta porque no me deja poner variables dentro de la fórmula (no se si es mi ignorancia o realmente no se puede).

1 Respuesta

Respuesta
1
La macro es esta, te preguntará el dato a buscar y posteriormente el rango donde buscarlo:
Sub Buscar()
Dim dat As String
dat = InputBox("Que dato quieres buscar", "PREGUNTA", 1)
rango = InputBox("Dime el rango donde buscar", "PREGUNTA", "A:A")
On Error Resume Next
Range(rango).Select
Selection.Find(What:=dat, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
Do While dat <> ""
dat = InputBox("Que dato quieres buscar", "PREGUNTA", 1)
rango = InputBox("Dime el rango donde buscar", "A:A")
On Error Resume Next
Range(rango).Select
Selection.Find(What:=dat, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
Loop
End Sub
Si tanto el dato como el rango no son correctos no te mostrará nada pero no dará error y se finalizará la macro
Si te ha servido puntúa y finaliza la pregunta
>Un saludo
>Julio
Julio:
Gracias por tu rápida respuesta!
Tu respuesta es excelente pero lamentablemente no supe expresar mis necesidades exactamente. De todas formas ya lo resolví, te paso el código por si te resulta de interés.
A lo mejor me podes ayudar para resolvir la siguiente duda:
Dentro de la sentencia: Selection.AutoFilter Field:=5, Criteria1:="=AMADOR", Operator:=xlAnd
Quisiera hacer referencia a una variable en donde dice "=AMADOR".
¿Podrías ayudarme con esta inquietud por favor?
Saludos,
Sebastián.-
PD: Acá van las sentencias de búsqueda que te comente arriba.
Dim FilaRequisidor, FilaPO, ReqIdent, QReq, FallaIdent, CantPO, Freno As Integer
Dim FilaBusqueda, ColumBusqueda As String
Hoja2.Select
'CUENTO LA CANTIDAD DE PO QUE HAY EN EL ARCHIVO
Range("A2").Select
While Freno = 0
If ActiveCell.Value <> "" Then
CantPO = CantPO + 1
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
Else
Freno = Freno + 1
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
ActiveCell.Value = CantPO
End If
Wend
'ARMO LA COLUMNA CON LOS APELLIDOS DE LOS REQUISIDORES (aca esta la busqueda)
Cells(FilaPO, 5).Select
While ReqIdent <> CantPO
FilaBusqueda = Hoja1.Name & "!R" & FilaRequisidor & "C1"
ColumBusqueda = Hoja1.Name & "!R" & FilaRequisidor & "C3"
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(SEARCH(" & FilaBusqueda & ",RC[-1],1)),"""",MID(RC[-1],SEARCH(" & FilaBusqueda & ",RC[-1],1)," & ColumBusqueda & "))"
If Cells(FilaPO, 5).Value = "" Then
If FilaRequisidor < QReq Then
FilaRequisidor = FilaRequisidor + 1
FilaBusqueda = Hoja1.Name & "!R" & FilaRequisidor & "C1"
ColumBusqueda = Hoja1.Name & "!R" & FilaRequisidor & "C3"
Else
Selection.Interior.ColorIndex = 3
Selection.Value = "¿?"
FallaIdent = FallaIdent + 1
FilaPO = FilaPO + 1
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
ReqIdent = ReqIdent + 1
FilaRequisidor = 6
End If
Else
FilaPO = FilaPO + 1
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
ReqIdent = ReqIdent + 1
FilaRequisidor = 6
End If
Wend
Columns("A:Q").EntireColumn.AutoFit
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
ActiveCell.Value = FallaIdent & " PO sin requisidor identificado"
Selection.Font.FontStyle = "Negrita"
Selection.Interior.ColorIndex = 3
'ORDENO EL LISTADO SEGUN 3 CRITERIOS: REQUISIDOR, COMPRADOR, FECHA DE GENERACION
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Key2:=Range("O2") _
, Order2:=xlAscending, Key3:=Range("A2"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
ThisWorkbook.Save
Hoja1.Select
'AVISO QUE HUBIERON PO PARA LAS CUALES NO SE IDENTIFICO EL REQUISIDOR'
If FallaIdent <> 0 Then
MsgBox ("No se han podido identificar los requisidores de " & FallaIdent & " PO")
MsgBox ("En la columna Requisidor encontrara las celdas correspondientes pintadas de rojo y con el texto '¿?' adentro. Debe Identificar los requisidores manualmente si quiere incluir las PO en el envio de consulta")
End If
Pues efectivamente la pregunta no se parece en nada a lo que necesitabas, pero en fin me alegro de que ya lo hayas resuelto, en lo que se refiere a poner variables en el criterio la sintaxis es esta:
Primero tienes que dar un nombre a la variable que la tomas de donde quieras en este caso es de un Inputbox.
DatoBuscado = InputBox("¡Escriba el nombre del articulo!", "BUSCAR", 1)
Range("A:A").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=DatoBuscado
Ahora ya puedes utilizarlo en tu codigo, si AMADOR esta en la celda C4 (por ejemplo)
sería así:
valor = Range("C4").Value
Range("A:A").Select
Selection.Autofilter
Selection.Autofilter Field:=1, Criteria 1:= valor
>Un saludo
>Julio
*Si ya te ha servido puntua y finaliza la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas