lunes, 1 de marzo de 2010

Buscar en matrices. La función ÍNDICE.

Pedía ayuda un lector sobre un problema que se le planteaba:
...tengo un problema relacionado con obtener un valor de una matriz [...]de la tabla de abajo conociendo de la columna "Jun" y el dato "6.81" necesito obtener el contenido de la columna VALOR que para este caso seria "CI". ...

Empleando diferentes herramientas ya conocidas (Asignar nombres) y entendiendo nuestra búsqueda en términos bidimensionales (ver búsquedas de referencias cruzadas); podremos resolver el problema planteado; si y sólo si los valores o registros son únicos.
Las funciones a emplear serán: INDICE, COINCIDIR e INDIRECTO; como herramientas la ya comentada Asignar nombre a rango y la Validación de celdas.
Nuestra matriz de datos es:


Nuestro primer trabajo será Asignar nombre a diferentes rangos, en concreto he definido:
Abr =Hoja2!$E$2:$E$10
Ago =Hoja2!$I$2:$I$10
Dic =Hoja2!$M$2:$M$10
Ene =Hoja2!$B$2:$B$10
Feb =Hoja2!$C$2:$C$10
Jul =Hoja2!$H$2:$H$10
Jun =Hoja2!$G$2:$G$10
Mar =Hoja2!$D$2:$D$10
May =Hoja2!$F$2:$F$10
Nov =Hoja2!$L$2:$L$10
Oct =Hoja2!$K$2:$K$10
Sep =Hoja2!$J$2:$J$10
En segundo lugar, empleando la Validación de celdas con listas configuraré mis criterios de búsqueda. En las celdas O4 y P4 aplico las siguientes validaciones:


La validación de la izquierda nos desplegará el mes a seleccionar, mientras que la validación de la derecha nos desplegará los valores del mes.


Sólo nos queda por tanto construir nuestra fórmula:
=INDICE($A$1:$M$10;COINCIDIR(P4;INDIRECTO(O4);0)+1;1)
es decir, con la función COINCIDIR(valor buscado; en la matriz; coincidencia) obtenemos un número de orden; la ordenación que tiene el valor numérico desplegado en P4 dentro de la columna o rango del mes mostrado en O4; lo que realmente estamos obteniendo, por tanto, es el número de fila del valor numérico.
Número de Fila necesaria para aplicarlo después sobre la función INDICE(matriz; número fila; número columna). Aplicamos la función sobre tdo nuestra matriz de datos (o también sobre la columna de 'VALOR'), indicándole que el número de fila a devolver será el obtenido con la función COINCIDIR antes resuelta; y puesto que el valor que deseamos se encuentra en la columna 'VALOR' le indicamos la columna 1.

2 comentarios:

  1. si los registros esta repetidos. cual seria la solucion?
    gracias

    ResponderEliminar
  2. Hola,
    si los registros están repetidos es obvio que no obtendríamos un único valor, esperando por tanto un listado de ellos.
    Por tanto nuestro planteamiento debería ser totalmente diferente, trabajando con rangos de datos; probablemente con fórmulas matriciales.
    Subiré al blog en los próximos días un ejemplo sobre la cuestión.
    Saludos

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.