Foros del Web » Soporte técnico » Ofimática »

Problemas para crear funcion con el metodo FIND

Estas en el tema de Problemas para crear funcion con el metodo FIND en el foro de Ofimática en Foros del Web. Necesito de sus conocimientos en lo referido en macros en Excel, he tratado de usar el metodo FIND que es usado para buscar en una ...
  #1 (permalink)  
Antiguo 01/03/2011, 12:53
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Problemas para crear funcion con el metodo FIND

Necesito de sus conocimientos en lo referido en macros en Excel, he tratado de usar el metodo FIND que es usado para buscar en una hoja de excel, la misma empleandola como funcion y solo me devuelve un solo valor, pese a los varios intentos de que me devuelda la siguiente cadena existente.
El mismo codigo usado como procedimiento funciona de maravilla pero eso hace que el mismo sea usado para valores fijos. Adjunto la secuencia de codigo que he empleado:

Function BuscarVal(ValorBuscado, Matriz As Range, Posicion)
Cont = 1
ValBus = ""
With Matriz
Set c = .Find(ValorBuscado, LookIn:=xlValues)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
If Cont = Posicion Then
Fil = c.Row
Col = c.Column
ValBus = .Cells(Fil, Col).Value
Else
Cont = Cont + 1
Set c = .FindNext(c) '<- En este punto pierde la informacion y se sale
End If
Loop While Not c Is Nothing And c.Address <> FirstAddress
End If
End With
BuscarVal = ValBus
End Function

Agradesco de antemano su ayuda.
  #2 (permalink)  
Antiguo 01/03/2011, 14:24
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Respuesta: Problemas para crear funcion con el metodo FIND

¿Estás seguro que esa función personalizada te funciona "de maravillas"?...

Observa que termina asignando a "BuscarVal" el valor de "ValBus".
Pero "ValBus" no es otra cosa que el valor de una celda que contiene "ValorBuscado"...

En otras palabras: a esa función le entregas "ValorBuscado" y te devuelve "ValorBuscado", ó entra en un loop interminable si "Cont = Posicion"...

¿Podrías explicar -con más detalle- que es lo que deseas conseguir?
Saludos, Cacho.
  #3 (permalink)  
Antiguo 02/03/2011, 11:49
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Problemas para crear funcion con el metodo FIND

Tienes razon mrcf con respecto al LOOP, esta mal ubicado una linea de comando, asi que paso la correccion y ademas lo pongo como PROCEDIMIENTO el mismo funciona sin ningun problema:
Sub BuscarVal()
ValorBuscado = "*Roller*"
Matriz = Worksheets("Hoja1").Range("A1:Z100")
Posicion = 4
'****************************
Cont = 1
With Worksheets("Hoja1").Range("A1:Z100")
Set c = .Find(ValorBuscado, LookIn:=xlValues)
If Not c Is Nothing Then
Do
FirstAddress = c.Address
If Cont = Posicion Then
Fil = c.Row
Col = c.Column
ValBus = .Cells(Fil, Col).Value
Else
Cont = Cont + 1
Set c = .FindNext(c) '<- En este punto pierde la informacion y se sale
End If
Loop While Not c Is Nothing And c.Address <> FirstAddress
End If
End With
End Sub
'***********************
Ahora bien si lo pasan el mismo como funcion o lo dejan como procedimiento ó lo llaman desde una funcion por algun razon que no entiendo no funciona salvo que Posicion=1, en la linea de comando: Set c = .FindNext(c) se pierde y sale de la interaccion.
El objetivo de la misma es que me devuelva un valor en base a una consulta en la que inclusive puedo añadir que columna deseo obtener una ves que identifique la fila en el que se encuntra el dato buscado.
  #4 (permalink)  
Antiguo 02/03/2011, 14:20
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
De acuerdo Problemas para crear funcion con el metodo FIND

Nota que:

--> Defines "Matriz" (mal definido, por cierto) y no vuelves a utilizar esa variable.

--> Aplicas un "Find" al rango "A1:Z100", pero lo más probable es que lo que buscas sólo se encuentre en la columna A (por ejemplo).

--> Después de obtener la cuarta aparición (establecido por "Posicion") del dato buscado y asignárselo a "ValBus", en lugar de terminar el proceso, continúas hasta terminar la BD para -recién entonces- terminar el procedimiento (claramente innecesario e ineficaz).

Por todo lo anterior te pregunto: ¿Estoy equivocado si digo que lo que quieres obtener son todas las filas que contienen "Roller" en una columna (la "A", por ejemplo), y tomar de esas filas todos sus datos o sólo algunas columnas y copiarlos en otro lado?...

Porque si es así, un mero Filtro Avanzado te brindará esa información en instantes y con "cero" complicación.

Aguardaré tu descripción de lo que quieres hacer: ello será más interesante que aplicarnos a evaluar una macro que -por ahí- no es la forma más eficiente.

Saludos, Cacho.
  #5 (permalink)  
Antiguo 03/03/2011, 07:08
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Problemas para crear funcion con el metodo FIND

mrocf, si verificas al aparecer la cuarta aparicion (establecido por "Posicion") el mismo no ejecuta la sgte linea de comando: Set c = .FindNext(c), por consiguiente al efectuar la consulta c.Address <> FirstAddress las mismas llegan a ser iguales he inmediatamente sale del bucle.

Para mejor comprencion adjunto estas imagenes que espero aclare algunas dudas

En el mismo libro se cuenta con dos hojas la primera llamada "BD" en donde se encuentra toda la informacion existente, la misma esta sujeta a actualizaciones.


La segunda hoja inicialmente esta asignado con el nombre "Hoja1", en la cual se filtra la informacion deseada segun la necesidad del usuario:


Es cierto que se puede evitar complicaciones con un filtro avanzado, pero para poder filtrar la informacion deseada se deberia de hacer varias consultas en este filtro, cosoa que con el macros solo se efectua una y la informacion es obtenida.

He desarrollado otra alternativa que cumple esta finalidad, pero mi interes en persistir con el tema de utilizar el comando FIND dentro de una FUNCTION es que simplemente no me devuelve ningun dato mas alla de la primera interaccion solicitada.
  #6 (permalink)  
Antiguo 03/03/2011, 09:30
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
De acuerdo Problemas para crear funcion con el metodo FIND

¡Ahora se entiende muchísimo mejor el objetivo perseguido!...

Suponiendo que la hoja activa sea "Hoja1", coloca lo siguiente en un módulo común:
Código PHP:
Sub BuscarVal()
Application.ScreenUpdating False
[a8].CurrentRegion.Delete xlShiftUp

With Worksheets
("BD")

.[
aa1] = .[a1]: .[aa2] = "*" & [b1] & "*"
.[ab1] = .[d1]: .[ab3] = .[aa2]
.[
a1].CurrentRegion.AdvancedFilter Action:=xlFilterCopy_
  CriteriaRange
:=.[aa1:ab3], CopyToRange:=[a8], Unique:=False
.[aa:ab].Delete

End With
Application
.ScreenUpdating True
End Sub 
Saludos, Cacho.

Etiquetas: excel;2007;, find, findnext, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:23.