Jump to content
nickmartinez

Udf Buscarv anidado con Coincidir(metodo find)

Recommended Posts

Saludos compañeros,de nuevo por acá requiriendo de su ayuda,resulta que intente hacer una udf para encontrar un dato usando buscarv anidado con la funcion coincidir,pero no me sale,logre hacer una macro usando rangos fijos pero no es la idea ya que quisiera que los rangos se seleccionaran como cuando uno selecciona una matriz en buscarv,algo como asi :

 

 

image.png.a6de1a3ff6a21427c8e5570d5f202e97.png

 

 

enviare ejemplo a ver si me pueden ayudar(celda_Ref=k21)hace referencia al dato que buscara coincidir,de igual forma (columna b21:k21 hacer referencia al rango donde se buscara la columna que coincida con celda_ref) y la matriz es la matriz del buscarv,dejare la macro que hice para que sirva de orientación ya que ella funciona,pero lo que no se es crear la UDF como se ve en la imagen,agradezco la ayuda posible

zoom.xlsm

Share this post


Link to post
Share on other sites

Hola

¿Que es lo que según tu, no hace Buscarv pero si una UDF? 

¿Necesitas una UDF solo para reemplazar una función nativa? 

Intuyo que solo necesitas escribir un criterio de busqueda y seleccionar un rango, ¿estoy bien?

 

Saludos

Share this post


Link to post
Share on other sites

Hola @nickmartinez

Tu consulta me suena a ... Querer reinventar la rueda! Hacer una UDF que dependa de otra o varias funciones nativas, mejor las anido en la interfaz de Excel y me evito molestia.

Function Val_Buscado(Celda_Buscada As Range, Celda_Ref As Range, Columna As Range, Matriz As Range)
Dim Columnas As Integer
Dim valor As Double

Application.Volatile
Columnas = Range(Columna).Find(Celda_Ref).Column - 1
valor = Application.WorksheetFunction.VLookup(Range(Celda_Buscada), Range(Matriz), Columnas, 0)
Val_Buscado = valor
End Function

Luego en tu código celda_buscada esta como rango y luego la metes dentro de un range? Las cosas funcionan diferente en Excel y VBA. Te sugiero que antes empieces por lo básico y vayas poco a poco.

Saludos!

Share this post


Link to post
Share on other sites

Saludos gracias por responder necesito hacer lo que esta en la macro como una udfimage.thumb.png.e6ef95daa7745528a010b3fa1d27cc69.png

pero sin colocar manualmente el rango como en la macro1 si no que cuando abra la funcion val_buscado pueda selecionar el rango que yo desee desde ahi

 

Share this post


Link to post
Share on other sites

digitalboy no quiero reinventar la rueda jeje,es solo que no quiero obviamente estar haciendo una formula en todo momento por que los datos pueden cambiar de columnas o de fila,con una Udf solo elijo las filas y las columnas que me interesan y ya esta hecho,no tengo que formular de nuevo,creo que es la idea de excel hacernos la vida mas facil,si los datos no se movieran dejo las funciones de excel por defecto

Share this post


Link to post
Share on other sites
Hace 4 horas, nickmartinez dijo:

digitalboy no quiero reinventar la rueda jeje,es solo que no quiero obviamente estar haciendo una formula en todo momento por que los datos pueden cambiar de columnas o de fila,con una Udf solo elijo las filas y las columnas que me interesan y ya esta hecho,no tengo que formular de nuevo,creo que es la idea de excel hacernos la vida mas facil,si los datos no se movieran dejo las funciones de excel por defecto

@nickmartinez sigo pensando lo mismo....

Describe que significa cada parámetro de tu udf, que parámetros das de entrada y cual seria el valor de salida, por que yo no lo veo ningún sentido a lo que tienes.

Saludos!

Share this post


Link to post
Share on other sites

.

 

Prueba así:

Function Val_Buscado(Celda_Buscada As Range, Celda_Ref As Range, Columna As Range, Matriz As Range)
Dim Columnas As Integer
Dim valor As Double

Application.Volatile
Columnas = Columna.Find(Celda_Ref).Column - 1
valor = Application.WorksheetFunction.VLookup(Celda_Buscada, Matriz, Columnas, 0)
Val_Buscado = valor

End Function

Sub Buscar()
valor = Val_Buscado(Range("A15"), Range("K21"), Range("B21:K21"), Range("B21:K34"))
End Sub

y como fórmula, yo uso el punto y coma (;) como separador:

=Val_Buscado(A15;K21;B21:K21:B21:K34)

 

.

Edited by Antoni

Share this post


Link to post
Share on other sites

Hola a todos...
 

Me sigue pareciendo redundante la función Val_Buscado, cuando bien se podría haber empleado la siguiente formula:

=BUSCARV(A15,B21:K34,COINCIDIR(K21,B21:K21),0)

Será solo por obtener el cuadro de dialogo de argumentos a función? Y aun asi... Pero cada quien conoce sus necesidades.

Saludos!

Share this post


Link to post
Share on other sites

Hola

Siendo que fue lo que sospeche, lo haría un poco mas corto

Function Vbuscar(Valor As Range, Matriz As Range, Columna As Range)

Application.Volatile
Set c = Matriz.Find(Columna): Col = c.Column - 1
v = Application.VLookup(Valor, Matriz, Col, 0)

Vbuscar = v: Set Col = Nothing

End Function

Lo que si debes hacer, es seleccionar los encabezados de la matriz, esto servirá para obtener la columna

Modo de uso: =Vbuscar(A3,$B$21:$P$34,$K$21)

 

Saludos 

UDF Vbuscar VBA_GP.zip

Share this post


Link to post
Share on other sites

Muchas gracias Gerson por tu aporte,los que usamos Excel siempre buscamos economizar tiempo aunque sean segundos,Digitalboy si vieras la cantidad de Udf que hay en la web que al igual que tu me parecen redundante a mi,imagínate,hasta para hacer sumas jejeje pero cada quien resuelve como puede y como quiere lo que me parece una locura a mi o a ti le parece efectivo a otro y hasta lo hace feliz,un abrazo GRANDE para todos los miembros de la comunidad especialmente para aquellos que sacaron de su valioso tiempo para dar su aporte

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 5112 personas - Aprender Excel - Total: 4.7 / 5