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

#11 Raúl Z.
26/11/2007 - 22:07 | Informe spam
Te comento otra cosa que he omitido, estoy utilizando Excel 2007
Respuesta Responder a este mensaje
#12 Héctor Miguel
26/11/2007 - 22:45 | Informe spam
hola, Raúl !

Te comento por partes las pequenas fallas que encuentro.



=> de cual de las propuestas de codigo estamos hablando ?

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.



=> el codigo utiliza "dos partes":
una por funciones de hoja de calculo para "contar" (si existen) las coincidencias
la otra es "la busqueda del siguiente" o primero que se encuentre (propiamente dicho)

=> por otro lado, en tu consulta anterior comentabas que la busqueda debia ser "completa" (esto es)
si preguntas por "Pérez, Ruben José" (así textualmente), se asume que la celda debera contener (SOLO) lo que preguntas
aunque (sin embargo) las funciones de hoja (las que "cuentan" las coincidencias) incluyen una busqueda "parcial"
otra alternativa seria "barrer" cada hoja por (todas) las coincidencias (sin contar por funciones de hoja de calculo)...
y hacer un segundo "barrido" para detener el codigo en la primera de las coincidencias encontradas -?-

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 seria q quedasen filtradas solamente las que concuerdan con la busqueda...



=> lo de "filtradas" (como que) no me ha quedado muy claro -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#13 Raúl Z.
26/11/2007 - 23:12 | Informe spam
Hola Miguel
Te respondo:
"Héctor Miguel" escribió:
=> de cual de las propuestas de codigo estamos hablando ?

de este codigo:
Sub Busca_texto()
Application.ScreenUpdating = False
Dim Buscar As String, Hallados As Byte, n As Byte
Buscar = Trim(InputBox("Introduce el DOMINIO 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
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

=> por otro lado, en tu consulta anterior comentabas que la busqueda debia
ser "completa" (esto es)
Sí completa me refería a Pérez, no x ej. a Perez o a Pere..

=> lo de "filtradas" (como que) no me ha quedado muy claro -?-

Filtradas me refiero a que me muestre si es posible la/s fila/s del dato que
busco..
Respuesta Responder a este mensaje
#14 Raúl Z.
26/11/2007 - 23:13 | Informe spam
Hola Miguel
Te respondo:
"Héctor Miguel" escribió:
=> de cual de las propuestas de codigo estamos hablando ?

de este codigo:
Sub Busca_texto()
Application.ScreenUpdating = False
Dim Buscar As String, Hallados As Byte, n As Byte
Buscar = Trim(InputBox("Introduce el DATO 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
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

=> por otro lado, en tu consulta anterior comentabas que la busqueda debia
ser "completa" (esto es)
Sí completa me refería a Pérez, no x ej. a Perez o a Pere..

=> lo de "filtradas" (como que) no me ha quedado muy claro -?-

Filtradas me refiero a que me muestre si es posible la/s fila/s del dato que
busco..
Respuesta Responder a este mensaje
#15 Héctor Miguel
27/11/2007 - 06:12 | Informe spam
hola, Raúl !

__ 1 __
=> de cual de las propuestas de codigo estamos hablando ?



de este codigo:
Sub Busca_texto()
Application.ScreenUpdating = False
Dim Buscar As String, Hallados As Byte, n As Byte
Buscar = Trim(InputBox("Introduce el DATO 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
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



1) (creo que) estas leyendo muy rapido los comentarios anteriores -?-

podrias comentar que es lo que obtuviste despues de leer esta parte del mensaje anteiror ?
== desde aqui > el codigo utiliza "dos partes":
una por funciones de hoja de calculo para "contar" (si existen) las coincidencias
la otra es "la busqueda del siguiente" o primero que se encuentre (propiamente dicho)

=> por otro lado, en tu consulta anterior comentabas que la busqueda debia ser "completa" (esto es)
si preguntas por "Pérez, Ruben José" (así textualmente), se asume que la celda debera contener (SOLO) lo que preguntas
aunque (sin embargo) las funciones de hoja (las que "cuentan" las coincidencias) incluyen una busqueda "parcial"
otra alternativa seria "barrer" cada hoja por (todas) las coincidencias (sin contar por funciones de hoja de calculo)...
y hacer un segundo "barrido" para detener el codigo en la primera de las coincidencias encontradas -?-
== hasta aqui ==
si crees necesaria una (intento de) "explicacion" mas clara (y posiblemente larga)... comentas ?

__ 2 __
=> por otro lado, en tu consulta anterior comentabas que la busqueda debia ser "completa" (esto es)
Si completa me referia a Pérez, no x ej. a Perez o a Pere..



2) dentro de los argumentos (en codigo vba) para el metodo ".Find"...

a) una cosa es busqueda "completa" (el argumento LookAt:= que puede ser xlWhole o xlPartial)
esto significa que al buscar "Pérez" <= si "esto" es LO UNICO que contiene la celda => usas xlWhole
pero si la celda puede contener "Pérez, Ruben José" <= entonces al argumento debe ser xlPartial

b) otra cosa es que coincidan (may/min)usculas (el argumento MatchCase:= que puede ser True o False)

__ 3 __
=> lo de "filtradas" (como que) no me ha quedado muy claro -?-


Filtradas me refiero a que me muestre si es posible la/s fila/s del dato que busco...



3) sigo perdido... no crees que seria mejor utilizar autofiltros o filtros avanzados por codigo -???-

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida