lunes, 22 de septiembre de 2014

Otros usos de la función INDICE.

Estamos muy acostumbrados a emplear la función INDICE siguiendo su primera sintaxis para, principalmente, localizar un valor dentro de una matriz de valores, determinado por su número de fila y columna:
=INDICE(matriz-rango, número_fila, [número_columna])
Sin duda una forma muy cómoda y potente de búsqueda.. en especial al combinar/anidar la función COINCIDIR.


Sin embargo, la función INDICE tiene más recorrido y sorpresas que darnos... y es que esta función no sólo devuelve el dato de la matriz buscada, si no que también el resultado es una referencia y será interpretado como tal por otras fórmulas!!.
Por tanto, el valor devuelto por la función INDICE se puede usar como una referencia o como un valor, dependiendo de la fórmula.

Podemos comprobarlo en el siguiente ejemplo:


Observamos un uso habitual de INDICE para conseguir el dato dentro de un rango, en la celda 11 hemos introducido:
=INDICE($C$3:$N$8;3;4)
lo que encuentra el valor correspondiente a la fila 3 y columna 4, esto es, el resultado será: 472.
Sin embargo, haciendo uso, de por ejemplo la función CELDA con su argumento 'dirección', en nuestra celda C12:
=CELDA("dirección";INDICE($C$3:$N$8;3;4))
conseguimos fácilmente la referencia donde se encuentra el valor buscado ($F$5)!!.

Un gran avance para nuestras formulaciones, sin duda.


Pero tenemos alguna sorpresa más...
Si definimos los argumentos de INDICE número_fila o número_columna como 0 (cero) o vacío, nuestra función INDICE devuelve la matriz de valores de toda la columna o fila, respectivamente. Algo fantástico para trabajar matricialmente, si fuera el caso.
Sobre nuestro ejemplo de la imagen anterior.


Vemos las funciones insertadas en C14 y C15, que nos devuelven las sumas de la fila 3 y columna 4 completas (del rango o matriz C3:N8).
En C14 la suma de toda la columna 4:
=SUMA(INDICE($C$3:$N$8;;4))
y en C15 la suma de toda la fila 3:
=SUMA(INDICE($C$3:$N$8;3;))


Potencia y flexibilidad.
Pero aún queda algo más, y es que la función INDICE tiene una segunda sintaxis, en forma de referencia:
=INDICE(ref, número_fila, [número_columna], [número_área])
En esencia tiene la misma finalidad, buscar o localizar valores o referencias dentro de un rango o matriz, pero en este caso si la referencia se compone de selecciones no adyacentes, podremos elegir la selección donde buscar. Esto es, podemos buscar información en rangos no contiguos!!.

Lo vemos en el siguiente ejemplo, con tres rangos donde buscar...

Otros usos de la función INDICE.


Para trabajar de manera algo más descriptiva he creado tres Nombres definidos:
Empresa1 =Hoja3!$C$2:$N$7
Empresa2 =Hoja3!$C$11:$N$16
Empresa3 =Hoja3!$C$20:$N$25


Sobre estos tres rangos vamos a generar un buscador y un agregador:


Para construir nuestro buscador/agregador C29:C31 he incorporado unas Validaciones de dato tipo lista, que nos muestra en cada caso los elementos 'tipos de gastos','meses' y 'empresas'.
En la celda C32 insertamos:
=INDICE((Empresa1;Empresa2;Empresa3);COINCIDIR(C29;$B$20:$B$25;0);COINCIDIR(C30;$C$19:$N$19;0);COINCIDIR(C31;{"Empresa1";"Empresa2";"Empresa3"};0))
que corresponde a la función ONDICE en su forma de referencia.
Como vemos el primer argumento consiste en una lista de los tres rangos donde buscar (Empresa1;Empresa2;Empresa3); con el segundo y tercer determinamos la fila y columna del dato buscado; e importante ahora, el cuarto argumento que nos dirige a uno de los tres rangos definidos en el primer argumento... todo ello apoyándonos en la función COINCIDIR.


Por otro lado en las celdas D29:D31 se han insertado las funciones de agregado, basándonos en el conocimiento que ya tenemos del trato como referencia que obtenemos con la función INDICE.
Por ejemplo en D29, al dejar el argumento número_columna vacío (o cero), conseguiremos la suma de toda la fila que corresponda al rango indicado y elegido entre los tres definidos:
=SUMA(INDICE((Empresa1;Empresa2;Empresa3);COINCIDIR(C29;$B$20:$B$25;0);;COINCIDIR(C31;{"Empresa1";"Empresa2";"Empresa3"};0)))

Si dejáramos vacíos ambos argumentos número_fila y número_columna, como en la celda D31, conseguiríamos la suma de todo el rango completo:
=SUMA(INDICE((Empresa1;Empresa2;Empresa3);;;COINCIDIR(C31;{"Empresa1";"Empresa2";"Empresa3"};0)))


En definitiva, hemos conseguido otra forma más de construir una suma dinámica.

No hay comentarios:

Publicar un comentario en la entrada