Macro para buscar

23/11/2007 - 21:14 por Raúl Z. | Informe spam
Hola a toda la comunidad
Necesito realizar una macro que me busque en una determinada hoja una serie
de datos alfanumericos. Basicamente al invocar la macro me tendría q aparecer
un cuadro de dialogo en el que diga x ej.: Ingrese texto a buscar:_______
Gracias desde ya
Raúl Z.
Gualeguay (ER) - Argentina

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
24/11/2007 - 07:13 | Informe spam
hola, Raúl !

lo "interesante" fue primero contar cuantas coincidencias "exactas" pudiera haber en (todas) las hojas del libro :))
para buscar en (todas) las hojas del libro, es necesario que la macro seleccione (todas) las hojas existentes

copia/pega las siguientes lineas en un modulo de codigo normal:

Sub Busca_texto()
Application.ScreenUpdating = False
Dim Buscar As String, Hallados As Byte, n As Byte
Buscar = Trim(InputBox("Introduce el texto ""EXACTO"" a buscar...", ""))
If Buscar = "" Then Exit Sub
For n = 1 To Worksheets.Count
With Worksheets(n): Hallados = Hallados + _
Evaluate("sumproduct(--(isnumber(find(""" & Buscar & """,'" & _
.Name & "'!" & .UsedRange.Address & "))))")
End With
Next
If Hallados = 0 Then MsgBox "No existe el dato: " & Buscar, , "": Exit Sub
Worksheets.Select
Cells.Find(What:=Buscar, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True).Activate
ActiveCell.Parent.Select
If Hallados > 1 Then MsgBox "Existen " & Hallados - 1 & " coincidencias mas.", , ""
End Sub

-> si (por casualidad) el dato que se busca no existe en la hoja "activa" (luego de seleccionadas todas) habra errores
a menos que, en lugar de utilizar el metodo Cells.Find(...) muestres el dialogo incorporado de la aplicacion (buscar)
para este caso, modifica las siguientes lineas (despues del Worksheets.Select)

de:
Cells.Find(What:=Buscar, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True).Activate

a:
Application.SendKeys "~{esc}"
Application.Dialogs(xlDialogFormulaFind).Show Buscar, 1, 1, 1, 1, 1

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta/respuesta original __
- dentro de la "determinada hoja", en donde debe buscar la macro ?


Dentro del libro
(en todas las celdas... en "determinada" columna... en "determinado" rango, ???)


En todas las celdas de todos los hojas
- el texto que se ha de buscar, debera encontrarse de forma completa ? (o puede ser parcial ?)


debe ser completa x ej. si busco STO-452 tengo que encontrar eso
demas esta decir que la busqueda se hara siempre en el formato en que se sabe esta introducido.-
- quieres que se busque en celdas con formulas ? (o solo en celdas con constantes, o ambas ?)


Es en celdas sin formulas
- una vez encontrado el dato que se busca (si existe)... que esperas que haga la macro ???


que se posicione en el dato buscado
- que debera hacer la macro en caso de que el texto buscado... no se encuentre donde se busca ???


Debera exibir x ej. un msg. que diga: "Dato inexistente"
se encuentre dos o mas veces donde se busca ???


se deberia posicionar en el primero que encuentre, en caso que exista 2 veces me lo informara.
Respuesta Responder a este mensaje
#7 Raúl Z.
24/11/2007 - 13:13 | Informe spam
Gracias Hector,
La macro está funcionando bastante bien con algunas limitaciones por ej.:
Apliqué la opción
Application.SendKeys "~{esc}"
Application.Dialogs(xlDialogFormulaFind).Show Buscar, 1, 1, 1, 1, 1
porque sino me daba error, con esta funciona, ahora si busco "gonzalez,
Gonzalez, gonzález, González" x ej en los primeros 3 casos me dirá que no
existe y colocando bien como en el 3º caso me aparece el cuadro "Buscar" con
el texto González (hay mas de uno) y si presiono "find next" me devuelve "no
se puede encontrar el dato de la busqueda" si presiono Close: me devuelve:
existen 2 coincidencias mas.

Raúl Z.
Respuesta Responder a este mensaje
#8 Héctor Miguel
24/11/2007 - 22:56 | Informe spam
hola, Raúl !

algunos dalogos presentas opciones distintas segun la version de excel
la propuesta anterior funcionara bien a partir de la version xp(2002)
en la version 2000 las opciones son mas "recortadas" que en las siguientes
en la version '97 (me parece que) no existe la posibilidad de agrupar hojas para la busqueda -?-

(en cualquier caso) la version "laarggaa" del procedimiento es activando cada hoja y buscando individualmente
(se espera que funcione para cualquier version de excel) -?-

haz unas pruebas con las siguientes modificaciones y...
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Busca_texto()
Application.ScreenUpdating = False
Dim Buscar As String, Hallados As Byte, n As Byte, Celda As Range
Buscar = Trim(InputBox("Introduce el texto ""EXACTO"" a buscar...", ""))
If Buscar = "" Then Exit Sub
For n = 1 To Worksheets.Count
With Worksheets(n): Hallados = Hallados + _
Evaluate("sumproduct(--(isnumber(find(""" & Buscar & """,'" & _
.Name & "'!" & .UsedRange.Address & "))))")
End With
Next
If Hallados = 0 Then MsgBox "No existe el dato: " & Buscar, , "": Exit Sub
For n = 1 To Worksheets.Count
Worksheets(n).Select
On Error Resume Next
Set Celda = Cells.Find(What:=Buscar, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
On Error GoTo 0
If Not Celda Is Nothing Then Celda.Activate: Set Celda = Nothing: Exit For
Next
If Hallados > 1 Then MsgBox "Existen " & Hallados - 1 & " coincidencias mas.", , ""
End Sub

__ la consulta original __
La macro esta funcionando bastante bien con algunas limitaciones por ej.:
Aplique la opcion
Application.SendKeys "~{esc}"
Application.Dialogs(xlDialogFormulaFind).Show Buscar, 1, 1, 1, 1, 1
porque sino me daba error, con esta funciona, ahora si busco "gonzalez, Gonzalez, gonzález, González"
x ej en los primeros 3 casos me dira que no existe y colocando bien como en el 4º caso
me aparece el cuadro "Buscar" con el texto González (hay mas de uno)
y si presiono "find next" me devuelve "no se puede encontrar el dato de la busqueda"
si presiono Close: me devuelve: existen 2 coincidencias mas.
Respuesta Responder a este mensaje
#9 Héctor Miguel
24/11/2007 - 23:36 | Informe spam
hola (de nuevo), Raúl !

como te decia...
"> algunos dialogos presentas opciones distintas segun la version de excel" (...)

para la version 2000, el efecto de seleccionar todas las hojas incluye:
-> (solo) la seleccion de celdas activa como rango de busqueda (total)
(generalmente queda solo la celda [A1] para todas las hojas en el grupo) :-((

una forma de "solucionar" este comportamiento es seleccionar primero todas las celdas y luego todas las hojas
y funciona para una busquede en el grupo de hojas (incluso) para la version '97
si modificas la parte final del procedimiento sugerido inicialmente (luego de la instruccion: -> Next) +/- a lo siguiente:

' la parte inicial de procedimiento la dejas igual y solo cambias...
Next
If Hallados = 0 Then MsgBox "No existe el dato: " & Buscar, , "": Exit Sub
Cells.Select
Worksheets.Select
Application.SendKeys "~{esc}"
Application.Dialogs(xlDialogFormulaFind).Show Buscar, 1, 1, 1, 1, 1
ActiveCell.Select
ActiveCell.Parent.Select
If Hallados > 1 Then MsgBox "Existen " & Hallados - 1 & " coincidencias mas.", , ""
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#10 Raúl Z.
26/11/2007 - 22:05 | Informe spam
Hola Héctor,
Te comento por partes las pequeñas fallas que encuentro.
Habiendo ingresado "Pérez, Ruben José" (así textualmente) y si busco, como
Pérez, PÉREZ po Pérez, me aparece el cuadro de buscar y cuando le doy find
next, me va a la primera hoja vacía.
Ahora si busco solo 1 palabra de una columna, x ej. Ford, me aparece un msg.
q dice: Existen xx coincidencias mas, y cuando presiono aceptar me posiciona
en la primera q encuentra, lo ideal sería q quedasen filtradas solamente las
que concuerdan con la busqueda.
Espero haber sido claro, y disculpas x robar tu tiempo

Raúl Z.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida