jueves, 18 de junio de 2009

Un ejemplo de BUSCARV sobre dos tablas de busqueda.

Nos podría ocurrir que necesitaramos realizar una busqueda de elementos de un campo de nuestras base de datos sobre distintas tblas auxiliares de donde recuperar algún otro tipo de información relacionada. El problema en este caso es dirigir el BUSCARV a la matriz de busqueda adecuada en cada caso. Para solucionar este pequeño inconveniente emplearemos la funciones BUSCARV, INDIRECTO y SI.
En nuestro ejemplo disponemos de dos tablas auxiliares con los listados de clientes y proveedores, rangos a los que tenemos que asignar un nombre:
cliente := $C$9:$D$13
proveedor := $C$16:$D$20
la clave del correcto funcionamiento de este ejercicio es, precisamente, el buen uso de esta definición de nombres sobre los rangos de las tablas auxiliares. Vemos las tablas en cuestión.


Una vez definidos los rangos y dados los nombres, procedemos a realizar la relación entre tablas mediante la función BUSCARV. Aplicamos BUSCARV sobre la tabla principal donde aparecen los códigos a relacionar:


y la función a aplicar sobre cada celda de la columna F sería:
=BUSCARV(F2;INDIRECTO(SI(IZQUIERDA(F2;2)="Cl";"cliente";"proveedor"));2;0)


donde la explicación sería la siguiente. En primer lugar determinamos con la función SI(IZQUIERDA(código;2)="Cl";"cliente";"proveedor") si el código a buscar es un 'cliente' o un 'proveedor', lo hacemos observando que los códigos de Cliente comienzan siempre por "Cl", es decir, que IZQUIERDA(código;2)="Cl"; lar referencias que nos interesa que nos devuelva esta función SI son los nombres previamente definidos ("cliente" y "proveedor"), ya que mediante la función INDIRECTO se convierten en un rango entendible por Excel como la 'matriz de busqueda' (argumento de BUSCARV), por lo que sólo nos queda indicarle el número de columna de estas matrices de busqueda, i.e., el campo de las tablas auxiliares que nos interesaba conocer. Para aplicar este ejemplo es necesario que las tabls auxiliares (cliente y proveedor) tengan una estructura de campos similar -al menos que el campo a relacionar se encuentre en el mismo orden de columna.

2 comentarios:

  1. me aparece un error. #¡REF!
    creo yo que el error me da por los rangos. Tengo una duda por ejemplo lo que dice "cliente := $C$9:$D$13" todo esto va escrito sobre la misma celda.?

    ResponderEliminar
    Respuestas
    1. Hola,
      cliente es un nombre definido, al que se le ha asignado el rango $C$9:$D$13. Debes revisar la manera de Asignar un nombre a un rango para ver cómo.
      Probablemente por eso te de un error...
      Slds

      Eliminar