jueves, 29 de octubre de 2009

Función definida por el usuario de una búsqueda vertical.

Solicitaba ayuda una lectora a este respecto:

Quisiera saber si hay alguna opción para que si por ejemplo pongo un nombre en una celda, pongamos en la celda A1 pongo "Pepe" y en B1 "micro 1", cada vez que ponga en otra celda "Pepe" en la correspondiente de la columna 2 me salga "micro 2" y que además, si, pongamos, en A2 he puesto "Cruz" y en B2 "micro 2", cuando convine "Pepe" y "Cruz" en una celda, en la correspondiente columna me salga "micro 1" y "micro 2", es decir, si en A5 pongo "Pepe" y "Cruz" que en B5 me salga "micro 1" y "micro 2".


La primera parte de la pregunta claramente se podría resolver mediante la función BUSCARV, la segunda es un poco más compleja y la dejaremos para una entrada posterior.
Si tuvieramos, al hilo de la cuestión planteada por la usuario, un listado con dos columnas de datos (Nombre y Micrófonos):


Para determinar y alcanzar el resultado deseado aplicaríamos la función BUSCARV sobre un valor buscado, por ejemplo, 'Pepe' referenciándolo a una celda:
=BUSCARV(nombre buscado; rango de datos; 2; 0)
Nada nuevo hasta ahora, si bien propondremos un punto de vista diferente a este problema.
Nos adentraremos en el mundo del VBA, de una manera muy sencilla ya que mis conocimientos en este punto son bastante limitados.
Desarrollaremos en VBA una Función definida por el usuario o UDF que nos ejecute o resuelva de igual forma que BUSCARV.
En primer lugar por tanto accederemos al Editor de VBA, presionando Alt + F11, o bien desde el Menú programador>Grupo Código>Visual Basic en Excel 2007.


Deberemos Insertar un procedimiento tipo 'Función':


Escribiremos en la ventana de Código la siguiente instrucción:


haz click en la imagen


Ya hemos creado una función que replica el BUSCARV estándar, pero específica para bases de datos de dos columnas. En cualquier momento podremos emplear esta función en nuestra hoja de cálculo:


observamos que al escribir el nombre de la función, Excel la reconoce al igual que las funciones estándar; y por supuesto podremos trabajar de igual forma desde su propia ventana diálogo:

6 comentarios:

  1. pero como hago para que la funcion definida se habra desde cualquier libro?
    gracias
    popeye1804@yahoo.com

    ResponderEliminar
    Respuestas
    1. Excelente la explicacion me sirvo de maravilla es lo que andaba
      buscando, excelente foro.

      Eliminar
  2. Hola.
    Soy usuario de EXCEL 2003 en un Windows XP
    Tengo un misterio en un archivo con una única Hoja, que está absolutamente en blanco. El archivo tuvo más hojas, pero fui borrándolas.
    A pesar haberla limpiado (Editar---> Borrar ---> Todo) y haber eliminado gráficos, fórmulas, macros y todo lo que conozco, al guardar el archivo (en blanco) me muestra que tiene una extensión de 1,79 Mb
    Y si copio la hoja a otro archivo me lleva arrastrado el problema.
    En una palabra: la Hoja parece contener "ALGO" no visible.
    ¿Pueden ayudarme o explicarme qué pasa? ¿Cómo eliminar esos 1,79 Mb?
    ¡Gracias!

    ResponderEliminar
    Respuestas
    1. Hola Rodolfo,
      es difícil de decir, pero probablemente guarde en su memoria restos de alguna tabla dinámica, o algún vínculo, alguna tabla ...
      No sabría decirte. Prueba Editando los vínculos, a ver si queda alguno vivo, y de paso alguna Conexión sobre datos importados.
      No se me ocurre otra cosa.
      Slds

      Eliminar
    2. Gracias.
      He probado absolutamente todo y nada funciona, el archivo "vacío" sigue con 1,79 MB de datos invisibles.
      No hay Tabla Dinámica ni vínculo alguno, ni objetos incrustados, ni gráficos, ni nada a la vista.
      Por si interesa he remitido el diabólico archivo a vuestra dirección de correo.Si alguien llega a alguna conclusión espero que me responda y podamos festejar una enseñanza más.
      De todos modos, quedo muy agradecido.
      Hasta pronto.

      Eliminar