jueves, 27 de febrero de 2020

Alternativa clásica a UNICOS

Repasando mentalmente formas de trabajar, al escribir días atrás sobre la función desbordada UNICOS recordé una fórmula clásica (escrita por Mynda Treacy de myonlinetraininghub.com, creo recordar) como alternativa a estas funciones novedosas aún no completamente extendidas a todos los usuarios.

La idea de hoy es obtener un listado de registros únicos a partir de una lista con elementos repetidos o no:



La primera opción, simple y fácil de interpretar, es emplear la funciones desbordadas ORDENAR y UNICOS, así en D3 insertaremos:
=ORDENAR(UNICOS(TblPAIS[País]))

con lo que obtenemos el listado ordenado de los países únicos... tal cual leemos de la fórmula.
Lo bueno de esta fórmula es que es desbordada, i.e., no tiene restricción de celdas, el rango desbordado en D3:D8 del ejemplo crecerá según su necesidad sin requerir atención por nuestra parte!!.


Una alternativa potente, para todos los usuarios, es emplear funciones clásicas como INDICE, COINCIDIR o CONTAR.SI.
Una primera opción nos retornará sin orden alguna, según aparezcan, los distintos países únicos... Así en E3 insertamos:
=SI.ERROR(INDICE(TblPAIS[País];COINCIDIR(0;INDICE(CONTAR.SI($E$2:E2;TblPAIS[País]);0);0);0);"")

posteriormente copiaremos manualmente hasta el rango deseado E3:E12.
OJO, por que si los elementos únicos sobrepasan el tamaño del rango perderemos elementos únicos en nuestro listado!!.

La explicación y clave de esta fórmula es el uso de
CONTAR.SI($E$2:E5;TblPAIS[País])
dentro de la fórmula, ya que nos devuelve una matriz de 1 y 0 de un tamaño igual al listado de países sobre los que trabajar, donde asocia el valor 1 si ya se ha evaluado o 0 si no se ha asociado ya.
Por ejemplo, si editamos la celda E6, cuando ya se han listado, en E3:E5 los países ES, FR e IT, la matriz generada sería:
{1;1;1;1;1;0;0;0;1;0}

comparado con la Tabla de países uno a uno tendríamos:
ES 1 - ya está listado en E3:E5
FR 1 - ya está listado en E3:E5
IT 1 - ya está listado en E3:E5
IT 1 - ya está listado en E3:E5
ES 1 - ya está listado en E3:E5
DE 0 - aún NO está listado en E3:E5
UK 0 - aún NO está listado en E3:E5
BE 0 - aún NO está listado en E3:E5
ES 1 - ya está listado en E3:E5
UK 0 - aún NO está listado en E3:E5

obviamente es una situación cambiante según arrastramos nuestra fórmula en el rango de trabajo E3:E12.

Para trabajar con ese vector/matriz de 0 y 1 comentado, aplicamos la función INDICE dando como argumento de fila el valor 0, lo que ha recuperar la totalidad del vector:
INDICE(CONTAR.SI($E$2:E2;TblPAIS[País]);0)


La siguiente función COINCIDIR recupera la primera posición del valor cero que encuentre, esto es, el primer país aún NO listado:
COINCIDIR(0;INDICE(CONTAR.SI($E$2:E5;TblPAIS[País]);0);0)


Esta posición absoluta recuperada nos sirve para obtener el país directamente de nuestra tabla original con un uso estándar de INIDICE:
INDICE(TblPAIS[País];COINCIDIR(0;INDICE(CONTAR.SI($E$2:E5;TblPAIS[País]);0);0);0)

Finalmente para depurar errores en el rango de trabajo E3:E12 aplicamos SI.ERROR


Sin duda más elaborado y complejo de entender, requiriendo en algunos casos ejecutar matricialmente la fórmula (presionado Ctrl+Mayusc+Enter).

Por rizar el rizo.. te habrás dado cuenta que la fórmula anterior ni siquiera devuelve datos ordenados!!... vaya contrariedad
:D

Solución o alternativa real a ORDENAR y UNICOS.

Aplicamos la siguiente fórmula en F3 para luego copiar hasta F12:
=SI.ERROR(INDICE(TblPAIS[País];COINCIDIR(K.ESIMO.MENOR(SI(CONTAR.SI($F$2:F2;TblPAIS[País])=0;CONTAR.SI(TblPAIS[País];"<"&TblPAIS[País]); ""); 1);CONTAR.SI(TblPAIS[País];"<"&TblPAIS[País]); 0));"")

La esencia del cálculo es similar a la explicación anterior... con la dificultad añadida de procesar el orden empleando la función K.ESIMO.MENOR.

Funciona perfectamente... pero con la misma limitación. Si el número de elementos únicos sobrepasa el número de celdas del rango de trabajo F3:F12 perderemos dichos elementos o países.

No hay comentarios:

Publicar un comentario

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