Buscar y Reemplazar en gangos y hojas determinadas

Hola a los Expertos...
Quisiera utilizar esta una macro pero tengo unos inconvenientes ... A continuación les paso la macro que tengo...:
Sub buscar()
buscado = Application.InputBox("Indique su busqueda", Type:=2)
If buscado = "" Then Exit Sub
Set resp = Cells.Find(What:=buscado, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If resp Is Nothing Then
MsgBox "Valor no encontrado"
Else
resp.Activate
End If
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
Set resp = Cells.Find(What:=buscado, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If resp Is Nothing Then
MsgBox "Valor no encontrado"
Else
resp.Activate
End If
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
End Sub
¿Cómo verán esta macro busca y reeplaza la celda del costado, osea si busca 45 y se encuentra en A45 borra el contenido de B45... Hasta ahí bien pero cundo pongo un numero a buscar se cierra y tengo que activarla de nuevo para hacer la siguiente búsqueda... Quisiera poder poner todas las búsquedas que desee y luego cerrarla manualmente... Lo segundo seria que me gustaría modificar la macro para que busque en determinada hoja y rango... Se puede...?
Desde ya muy agradecido ...
Ricardo

1 respuesta

Respuesta
1
Esta macro has debido de copiarla de algún sitio, y en él necesitaban algo más, has repetido la instrucción de buscar 2 veces pero solo funcionará una, para hacer lo que necesitas debes de poner esta otra:
Sub buscar()
Dim buscado As String
Do While buscado<> ""
buscado = Application.InputBox("Indique su busqueda")
If buscado = "" Then Exit Sub
Set resp = Cells.Find(What:=buscado, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If resp Is Nothing Then
MsgBox "Valor no encontrado"
Else
resp.Activate
End If
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
Loop
De esta forma cuando quieras terminar de buscar tan solo pulsas Enter o Aceptar en el Imputbox, como este esta en blanco terminará la macro, mientras que introduzcas datos continuará buscando.
Si te ha servido puntúa y finaliza la pregunta.
>Un saludo
>Julio
Hola.. antes que nada gracias por la respuesta...
Bueno la rutina que se repite la puse a propósito para que busque dos veces lo mismo y haga lo mismo...
Con respecto a la rutina que me pasas, no logro hacerla funcionar... debe haber algo mal y no lo encuentro... sin embargo por lo que puede leer de la rutina no busca en una determinada hoja o rango, y esto es algo que quería agregar...
Si me puedes hacer la atención de fijarte y ver si se puede poner la búsqueda por rangos te lo agradecería mucho...
Gracias
Efectivamente no busca en Rango alguno, busca en toda la hoja si el dato puesto esta en el Inputbox lo encontrará, sin problemas, si lo pones de forma diferente no lo encontrará, por ejemplo vaca y en la hoja esta Vaca, reconoce todos los datos puros introducidos en la hoja.
Asegurate que pones en el Inputbox el dato exacto, sin espacios al principio
>Un saludo
>Julio
Hola gracias por contestar nuevamente...
¿Se puede hacer algo con el tema de buscar en rangos ...?
Gracias de antemano..
Ricardo
Vale pues si quieres un rango la búsqueda en él se hace así:
Sub buscar()
Dim buscado As String
Do While buscado<> ""
buscado = Application.InputBox("Indique su busqueda")
Range("A1:A8").Select
On Error Resumen Next
Selection.Find(What:=buscado, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Selection.FindNext(After:=ActiveCell).Select
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
Loop
End Sub
En esta macro si no encuentra el dato no hará nada, si lo encuentra borrará la celda contigua de la derecha. El rango debes de cambiarlo tú.
Si quieres poner el valor del rango variable pones en vez el rango que he puesto yo estas dos lineas
rango= InputBox("Ponga el Rango")
Range(rango).Select
Así te valdrá siempre aunque cambies tu rango donde buscar.
>Un saludo
>Julio
*Si te ha servido puntuas y finalizas la pregunta
Hola.. gracias nuevamente por la respuesta...
Mira estuve tratando de hacer funcionar la rutina que me mandas y no hay caso no pude, no se me da error primero en "On Error Resumen Next" ... lo que hago es sacar esta parte y no me da error pero cuando ejecuto la macro no se abre el cuadro para poner los valores a buscar... prueba y veras...
La verdad no doy con el erro aver si tu puedes... gracias
O bien me pasas algún correo hotmail y chateamos del tema...
Ricardo
Perdón se me escapó una N el código es On Error Resume Next, la macro queda así:
Sub buscar()
Dim buscado As String
buscado=Application.InputBox("Indique su busqueda")
Do While buscado<> ""
Range("A1:A8").Select
On Error Resume Next
Selection.Find(What:=buscado, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Selection.FindNext(After:=ActiveCell).Select
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
buscado =Application.InputBox("Indique su busqueda")
Loop
End Sub
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas