lunes, 8 de octubre de 2012

Busqueda matricial por triangulación sobre un rango en Excel.

Hoy explicaré como localizar un valor en un rango dado, en concreto emplearemos un método similar al de triangulación, esto es, identificaremos sus dos coordenadas dentro del rango; lo que conseguiremos calculando en qué fila y columna se encuentra.

Este cálculo tiene inconvenientes cuando existen, dentro del rango de estudio, valores repetidos; pero sin duda para rangos indeterminados sin repeticiones es perfecto.

Partiremos de un rango al que le hemos asignado un nombre definido
Rango=D1:H9,
en el que el valor buscado no está repetido:

Busqueda matricial por triangulación sobre un rango en Excel.


La fórmula matricial que nos devuelve esa posición única es:
=SI.ERROR(DIRECCION(1/(MAX(((Rango)=B2)*1/FILA(Rango);0));1/(MAX(((Rango)=B2)*1/COLUMNA(Rango);0)));"No existe")

También podríamos haber optado por una fórmula estándar, empleando la función SUMAPRODUCTO como se ve en la celda B3:
=SI.ERROR(DIRECCION(1/SUMAPRODUCTO(MAX(((Rango)=B2)*1/FILA(Rango);0));1/SUMAPRODUCTO(MAX(((Rango)=B2)*1/COLUMNA(Rango);0)));"No existe")


Lo que hace esta fórmula, en cualquiera de sus formas, es localizar la primera fila en la que aparece (de arriba a abajo) el valor buscado y luego identifica la primera columna en la que aparece (de izquierda a derecha) el valor buscado; logicamente, si el valor buscado es único, en ese cruce fila+columna, obtenemos la dirección de la celda donde se halla el valor buscado único.

Desgranemos la fórmula matricial. Tenemos anidado en la función DIRECCION, como argumento para conseguir la fila de la celda, la fórmula:
=MAX((Rango=B2)*1/FILA(Rango);0).
Podemos ver en la imagen, para cada celda del rango de estudio qué obtenemos:

Busqueda matricial por triangulación sobre un rango en Excel.


Recordemos que está ejecutado matricialmente, y lo que tenemos son valores igual a cero excepto en la celda correspondiente a la coincidencia con el valor buscado, donde conseguimos el valor de la fila dividido entre 1 (Es una forma habitual de poder posteriormente recuperar la fila exacta).
Luego volveremos a invertir el cociente, dividiendo nuevamente entre 1, y lograremos el número de fila:
=1/(MAX(((Rango)=B2)*1/FILA(Rango);0))

Busqueda matricial por triangulación sobre un rango en Excel.



Repetimos el proceso para identificar ahora la columna. Con la fórmula matricial:
=1/(MAX(((Rango)=B2)*1/COLUMNA(Rango);0))
logramos conocer cuál es la columna en la que se encuentra el valor buscado.


El proceso es idéntico al de las filas, únicamente sustituimos la función FILA por COLUMNA.

Al tener identificado el número de fila y el número de columna donde está el valor buscado dentro del rango, podemos anidar amboss valores en la función DIRECCION que devuelve en estilo de celda A1 dicha situación. Esto lo anidamos a su vez en una función SI.ERROR para salvar posibles errores para el cao que no exista el valor buscado.
=SI.ERROR(DIRECCION(1/(MAX(((Rango)=B2)*1/FILA(Rango);0));1/(MAX(((Rango)=B2)*1/COLUMNA(Rango);0)));"No existe")

Repito que esta fórmula sólo es válida pra los casos en que el valor buscado no está repetido!!.

No hay comentarios:

Publicar un comentario en la entrada