Excel - Funcion Personalizada Buscarv

 
Vista:

Funcion Personalizada Buscarv

Publicado por Jose (20 intervenciones) el 18/06/2007 16:17:01
Hola,

Estoy tratando de definir una función personalizada que me permita realizar un buscav que cumpla dos criterios. Os detallo hasta lo que he conseguido programar:

Public Function Buscarv2(ByVal Valor_buscado1 As String, ByVal Valor_buscado2 As String, ByVal Rango_de_busqueda As Excel.Range, ByVal Indicador_columnas1 As Integer, ByVal Indicador_columnas2 As Integer) As String

Dim cell As Excel.Range

On Error Resume Next

For Each cell In Rango_de_busqueda

If cell.Value = Valor_buscado1 And cell.Offset(0, Indicador_columnas1 - 1) = Valor_buscado2 Then

Buscarv2 = cell.Offset(0, Indicador_columnas2 - 1).Value

End If

Next

End Function

Mis problemas son:

1)¿Cómo podría conseguir que cuando encuentre el primer valor quer cumpla las 2 condiciones que busco salga del bucle y no me sobreescriba los valores?
2)Si no hubiese en el rango de datos nada que cumpla las dos condiciones requeridas, ¿cómo podría hacer para la fórmula me devolviese "FALSO"?

Soy bastante nuevo en esto de programar funciones personalizadas, asi que os pediría vuestra opinión acerca del código que he creado. ¿Creeis que es correcto? ¿Es el mejor método para lograr lo que persigo? ¿Cómo lo habrías enfocado vosotros?

Mil Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Funcion Personalizada Buscarv

Publicado por JuanC (792 intervenciones) el 18/06/2007 16:45:10
en este momento no tengo demasiado tiempo para explicar nada...
igual te hice los cambios que necesitás (creo!!)

Public Function Buscarv2(ByVal Valor_buscado1 As String, ByVal Valor_buscado2 As String, ByVal Rango_de_busqueda As Excel.Range, ByVal Indicador_columnas1 As Integer, ByVal Indicador_columnas2 As Integer) As String
Dim cell As Excel.Range
Dim bEncontrado As Boolean

bEncontrado = False
On Error Resume Next

For Each cell In Rango_de_busqueda
If cell.Value = Valor_buscado1 And cell.Offset(0, Indicador_columnas1 - 1) = Valor_buscado2 Then
Buscarv2 = cell.Offset(0, Indicador_columnas2 - 1).Value
bEncontrado = True
Exit For
End If
Next

If Not bEncontrado Then Buscarv2 = "FALSO"
End Function

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funcion Personalizada Buscarv

Publicado por Jose (20 intervenciones) el 18/06/2007 16:58:51
Muchisimas gracias, es justo lo que andaba buscando. Lo que sucede es que ahora me surgen dos dudas más:

1)¿Cómo podría conseguir que la fórmula se actualizase automáticamente siempre y cuando algún dato de la base de datos se modificase?
2)¿Cómo podría conseguir que al igual que cuando en excel voy escribiendo una fórmula, me apareciesen comentarios indicándo que tipo de criterios he de introducir? En mi caso...quiero que cuando escriba =nuscarv2(...me vayan apareciendo indicadores de los campos que debo rellenar tras cada ";"...

Mil gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:Funcion Personalizada Buscarv

Publicado por Abraham Valencia (2415 intervenciones) el 18/06/2007 17:56:00
PArqa que la formula se "actualize" ante cualquier cambio en la "base de datos", agregale esta linea al incio:

Application.Volatile True

Para lo otro:

http://groups.google.com/group/microsoft.public.es.excel/browse_thread/thread/4934e5fd1fc463a6/3748180f8a6629d4?lnk=gst&q=comentarios+udf&rnum=4&hl=es#3748180f8a6629d4

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Funcion Personalizada Buscarv

Publicado por Jose (20 intervenciones) el 18/06/2007 18:11:21
Impresionante....Mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar